gdbについて整理します。
対象
簡単の為に、下記を例にしてgdbの基本操作を説明します。
degree_to_radian.c
const float MATH_PI = 3.141592f;
float degree_to_radian(float degree);
float radian_to_degree(float radian);
int
main( void )
{
float deg = 90.0f;
float rad = 0.0f;
rad = degree_to_radian(deg);
deg = radian_to_degree(rad);
return 0;
}
float degree_to_radian(float degree)
{
return (degree * MATH_PI / 180.0f);
}
float radian_to_degree(float radian)
{
return (radian * 180.0f / MATH_PI);
}
compileのときにdebug symbolを付ける 1
-gオプションを付けます。
$ gcc (src) -g -o (binary)
compileのときにdebug symbolを付ける 2
最適化します。
$ gcc (src) -O1 -g -o (binary)
$ gcc (src) -O2 -g -o (binary)
最適化
今回はプログラムが簡単すぎるということもあり、下記でcompileするとbreak mainしてrunしてstepしたらreturn 0;に行きます。
$ gcc degree_to_radian.c -O1 -g -o degree_to_radian
$ gcc degree_to_radian.c -O2 -g -o degree_to_radian
gdbが使えないということではなく、最適化するとgdbで追いかけたときに内容が変わる、ということです。
debug symbolを除去する
$ strip (binary)
全体の流れ
compileします。
$ gcc degree_to_radian.c -g -o degree_to_radian
gdbを使います。
$ gdb ./degree_to_radian
break mainを設定します。省略するとb mainです。runさせたあと、main関数の先頭で止まる様になります。
(gdb) b main
runさせます。
(gdb) r
stepさせます。stepは関数の中に入ります。
(gdb) s
printさせます。
(gdb) p rad
(gdb) p deg
continueさせます。ブレークポイントがあればそこで止まります。なければプログラムの最後まで行き、プログラムを抜けます。
(gdb) c
quitさせます。gdbから抜けます。
(gdb) q
広告
IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト