GDBを使ったQtアプリのデバッグ
プログラムを実行してエラーが起きた場合、ただ単にエラーが発生したということだけでなく、具体的に何行目で起きたかなどを調べたいときはgdbによるデバッグが有効です。
純粋なC++のみのプログラムの場合、コンパイルオプションに-gをつけることでデバッグできます。
g++ -g -O0 main.c
-gオプションがデバッグ情報の付加、-O0オプションが最適化を行わない(コードの入れ替えを防ぐ)オプションです。
これと同じことをQTでやりたい場合、プロジェクトファイル(.pr)を開き、次の1行を追加するだけでOKです。
QMAKE_CXXFLAGS += -g -O0
これでビルドされたプログラムにデバッグ情報が付加されます。
デバッグ手順
デバッグするときは次のようにgdbからプログラムを起動します。
gdb [プログラム名]
すると、gdbが開始します。この状態でrunを実行すると指定したプログラムのデバッグが開始できます。
(gdb) run Starting program: ...
もしエラーが発生した場合はエラー名と発生個所をリポートしてくれます。
Program received signal SIGSEGV, Segmentation fault. 0x0806a4a6 in _GLOBAL__sub_I_MainWindow.cpp ()
具体的にどのソースコードの何行目で起きたかを遡って知るにはwhereを実行します。
#0 0x0806a4a6 in _GLOBAL__sub_I_MainWindow.cpp () at ../MyApp/MainWindow.cpp:29 #1 0x0806a4a6 in _GLOBAL__sub_I_MainWindow.cpp () at ../MyApp/MainWindow.cpp:50 #2 0x080e6712 in __libc_csu_init () #3 0x0417346a in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6 #4 0x0806f7a9 in _start ()
以上、QT & gdbでデバッグをする方法でした。
関連項目
© Kaz