gdb 1

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(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト




«       »