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でデバッグをする方法でした。

関連項目
プライバシーポリシー