ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

QtアプリをVC++ 2008 Expressでデバッグする

公開日| 2009年05月11日 | コメントはまだありません。
デバッグマクロを使ってみましょう
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では、どうすればよいでしょう。


コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ