QtアプリをVC++ 2008 Expressでデバッグする
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
デバッグマクロを使ってみましょう
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "QApplication"
#include "QPushButton"
int main( int argc, char * argv[ ] )
{
QApplication app( argc, argv) ;
QPushButton hello( "Hello world" ) ;
hello.resize ( 100 , 30 ) ;
int ntest= 10 ;
int * pttest= NULL;
Q_ASSERT( ntest== 10 ) ;
Q_ASSERT( ntest!= 10 ) ;
Q_ASSERT_X( ntest!= 10 , "this is ntest!=10." , " ? I do't know." ) ;
Q_CHECK_PTR( pttest) ;
hello.show ( ) ;
return app.exec ( ) ;
}
上記のソースコードをデバッグ版のコンパイルを実施して、デバッグ実行してみてください。
14,15行目 で、以下の画面が表示されると思います。
ここでは、デバッグ情報の確認をしたので
"無視" をクリックしてください。
VC++のデバッグ出力情報に以下のような文字列が出力されたのではないでしょうか。
ASSERT: "ntest! =10" in file .\sample.cpp, line 14
ASSERT failure in this is ntest! =10.: " ? I do 't know.", file .\sample.cpp, line 15
In file .\sample.cpp, line 16: Out of memory
13行目は、正しいので、スルーして、14,15,16行目でエラー情報を吐き出しています。
また、リリース版のコンパイルを実施して、デバッグ実行してみてください。
何も出力されずに、ブレイクすることなく正常に"Hello world"のボタンが表示されたと思います。
MFCと同様、リリース版では、ノーチェックになることに注意してください。
メッセージ出力を使ってみましょう
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifdef QT_NO_DEBUG
#define QT_NO_DEBUG_OUTPUT
//#define QT_NO_WARNING_OUTPUT
#endif
// qDebug() << "Debug" のような記述を行う場合のみincludeする
#include <QDebug>
#include "QApplication"
#include "QPushButton"
int main( int argc, char * argv[ ] )
{
QApplication app( argc, argv) ;
QPushButton hello( "Hello world" ) ;
hello.resize ( 100 , 30 ) ;
// デバッグメッセージを出力する
qDebug ( "test-Debug" ) ;
qWarning( "test-Warning" ) ;
qCritical( "test-Critical" ) ;
qFatal( "test-Fatal" ) ;
// 必ず、QT_NO_DEBUG_OUTPUTをチェックする(コンパイルエラーになる)
#ifndef QT_NO_DEBUG_OUTPUT
qDebug ( ) << "Debug << " << & hello << "Position:" << hello.pos ( ) ;
#endif
hello.show ( ) ;
return app.exec ( ) ;
}
1 - 7行目まで追加されていることに注意してください。
1 - 4行目までは、リリース版で、デバッグ/警告メッセージ出力を行うか否かです。
2行目でリリース版で、デバッグメッセージ出力を行わないと宣言しています。
3行目(コメントアウトしていますが)でリリース版で、警告メッセージ出力を行わないと宣言しています。
上記のソースコードをデバッグ版のコンパイルを実施して、デバッグ実行してみてください。
21行目 で、以下の画面が表示されると思います。
ここでは、デバッグ情報の確認をしたので
"無視" をクリックしてください。
VC++のデバッグ出力情報に以下のような文字列が出力されたのではないでしょうか。
test-Debug
test-Warning
test-Critical
test-Fatal
Debug << QPushButton( 0x12feb4) Position: QPoint( 0,0)
また、リリース版のコンパイルを実施して、デバッグ実行してみてください。
ブレイクすることなく、すぐにアプリケーションが終了したと思います。
リリース版では、qFatalで、即アプリケーションを終了します。
実際に、デバッグ情報には、以下のメッセージが出力されていると思います。
test-Warning
test-Critical
test-Fatal
このようにデバッグ情報をMFCの時と同じように出力できます。
では、C/C++で、一番問題が多いと思われるメモリリークについてはどうでしょうか? Qtでは、どうすればよいでしょう。
コメントをどうぞ