debugger の使い方

Menu

write を引数二つで指定した回数m * n だけ行うプログラムを C で作成せよ。(hint atol を用いる ) 出力は空白または0を使う。

    n 回出力する関数  f
    f をm 回呼び出す関数 g

これを main から呼び出す。

lldb と gdb 両方で以下の操作を行い、log を示せ

(1) 作成したプログラム 引数 n=100, m=200 を指定して、lldb/gdb を起動する。プログラムは -O0 -g で compile すること。

(2) 関数 f に break point を設定し、そこで止める。

(3) frame up を使って main 関数で、m と n に正しい値が格納されていることを示せ

(4) break point を学籍番号の下位二桁の回数だけ通過してから、break point で止まるようにせよ

     また、m回廻す部分で、に=学籍番号の下位二桁回で、break point で止まるようにせよ。

(6) write する直前で、止まるように break point を設定せよ

(7) 実際に write system call が呼ばれる直前の stepi と、register の値を示せ

     (writeに break point をかけてもよいが...)

(8) break point を解除し、 f が終了するように finish コマンドを使う


option

m と n の値を変更することが可能かどうかを調べて試してみよ。

f と g は、clang/gcc の最適化によって、どのような assembler になるかを調べよ。

最適化されたコードを assembler level で trace してみよう。


Shinji KONO / Tue Dec 22 14:33:12 2015