debugger の使い方
Menuwrite を引数二つで指定した回数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 してみよう。