RSS

gdb デバッガの使い方

31 8月

はじめに

gdb は昔ながらのコマンドベースのデバッガです。GUI 環境が利用できる場合は、IDE のデバッガを使ったほうが簡単です。

 

要件

gdb はデフォルトでインストールされていないので、インストールする必要があります。Ubuntu の場合は以下のようにするとインストールできます。

sudo apt-get install gdb

ソースファイルをコンパイルする際、-ggdb または -g オプションを指定する必要があります。ここで、-ggdb を使う場合、より多くのデバッグ情報を扱えうことができます。

(例) gcc -ggdb -o test test.c

 

起動

gdb コマンドを実行すると gdb が起動できます。簡単な使用法とコマンドオプションなどは –help オプションを付けて起動すると表示できます。

(例) gdb –help

実際にデバッグする場合は、下のように gdb コマンドを入力します。

gdb [options] [executable-file [core-file or process-id]] または
gdb [options] –args executable-file [inferior-arguments …]

ソースファイル (test.c) と実行ファイル (test) が同じ場所にある場合なら、次のよう gdb を実行すればコマンド入力待ちになります。

$ gdb test
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...done.
(gdb)

core-file はプログラムが異常終了したとき作成される core ファイルです。process-id はこのプログラムのプロセスIDを特に指定しなければ省略できます。

–args は実行ファイルの後にコマンドライン引数が続くことを意味します。

実行ファイルがカレントディレクトリ別のフォルダにある場合は、–exec=EXEFILE オプションを使用します。あるいは –cd=DIR オプションでそのフォルダに移動して実行します。

ソースを表示する場合は、実行ファイルと同じ場所にソースファイルを置いておくか、–directory オプションでソースファイルの場所を指定する必要があります。

 

 

よく使うコマンド

ヘルプ

コマンド入力待ち (gdb) で help と入力するとヘルプが表示されます。ここで表示されるのはコマンドのクラス一覧なので、さらにクラスを指定して help コマンドを実行するとそのクラスに所属するコマンドのヘルプが表示されます。

(gdb) help
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
(gdb)

 

下の例は、data クラスに所属するコマンドのヘルプを表示したものです。

(gdb) help data
Examining data.

List of commands:

agent-printf -- Agent-printf "printf format string"
append -- Append target code/data to a local file
append binary -- Append target code/data to a raw binary file
append binary memory -- Append contents of memory to a raw binary file
append binary value -- Append the value of an expression to a raw binary file
append memory -- Append contents of memory to a raw binary file
append value -- Append the value of an expression to a raw binary file
call -- Call a function in the program
disassemble -- Disassemble a specified section of memory
display -- Print value of expression EXP each time the program stops
dump -- Dump target code/data to a local file
dump binary -- Write target code/data to a raw binary file
dump binary memory -- Write contents of memory to a raw binary file
  ....
  ....

 

開始・続行・終了

コマンド 機能 入力例
run [args] または r 最初から実行開始する。
cont または c ブレークポイントで一時停止中のとき、続きを実行する。
next または n 次の行へ。現在の行が関数呼び出しの場合は関数全体を1行として実行する。
step または s 次の行へ。現在の行が関数呼び出しの場合は、関数の中の行へ。
quit または q gdb を終了する。 (gdb) quit

 

ソースの表示

コマンド 機能 入力例
list または l 現在の行から10行分ソースを表示する。
list [start, [end]] または l [start, [end]] ソースのstart から end までの行を表示する。 l 2,4
file filename 現在とは別のソースファイルを選択する。

 

ブレークポイント

コマンド 機能 入力例
break または b 現在の行にブレークポイントを設定する。
break n または b n 行 n にブレークポイントを設定する。 b 8
info break または i break ブレークポイントの状態を表示する。
delete または d すべてのブレークポイントを削除する。
delete n または d n info break で表示されるブレークポイント番号 n のブレークポイントを削除する。
(gdb) info break
Num     Type           Disp Enb Address  
1       breakpoint     keep y   ...
(gdb) delete 1
No breakpoint number 8.
(gdb) delete 1
(gdb)

 

変数の調査

コマンド 機能 入力例
print x または p x 変数 x の内容を表示する。
(gdb) print i
$1 = 0
display x プログラムの実行が停止するごとに変数 x の値を表示する。
undisplay display の操作をすべて取り消す。
print x=c 変数 x の値を c に変更する。
(gdb) print i = 1
$3 = 1

 

 

 
コメントする

投稿者: : 2016/08/31 投稿先 C, gcc, Linux

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。