前回の復習です。印刷をせずに、この画面を見ながら、プロクターに口頭で答えてください。
次の用語をできるだけ詳しく説明してください。
以下は、あるMakefileの内容である。なお、polar_main2.cがメインプログラム、メインプログラムから呼び出す関数が定義されているのがcalc_polar2.c、それらの関数の宣言が行われているのがpolar.hとする。このMakefileの内容を一行目から何をやっているのかを説明せよ。
# an example of Makefile. OBJECTS = calc.polar_main2.o polar.o HEADERS = polar.h TARGET = clac_polar2 all : ${TARGET} clean: rm -f ${TARGET} ${OBJECTS} ${TARGET}: ${OBJECTS} cc -o $@ ${OBJECTS} -lm clac_polar_main2.o: ${HEADERS}
以下は、プログラムをデバッグするために、gdbで入力しているコマンドである。上から一行ずつ、それぞれ何が行われるかを説明しなさい。なお、**の印がついているものは、テキストには載っていないが、覚えていても損はないというものである(その行は回答しなくてもよい)。
(gdb) help (gdb) list (gbd) break 25 (gbd) break main (gbd) info breakpoints (gbd) watch count > 10 (gbd) display num ** (gdb) run taro (gdb) next (gdb) step (gdb) print value (gdb) set value = 12 (gdb) where ** (gdb) continue (gdb) clear 25 (gdb) delete 2 (gdb) quit
小規模なプログラムだとコンパイラの吐き出すエラー表示やちょっとプログラムを眺めるだけで、デバッグ作業は済んでしまう場合が多いですが、例えばプログラムは動くんだけど思い通りに動いてくれないという時に、デバッガはかなり重宝します。ちょっととっつきにくいかもしれませんが、すぐに慣れますので活用してみてください。なお、gdbデバッガで使うコマンドのスペルはかなり省略できます。例えば(gdb) break 12というのは(gdb) b 12とか、printやnextやstepも、それぞれpやnやsだけで大丈夫です。他のコマンドとスペルが重ならない限りは省略できます(他のコマンドと重なった場合はその旨表示されるので、どこまで省略できるかがわかります)。例えば、コマンドのdisableとdisplayはdisまで重なっていますので、dispと打てば良いということになります。お試しあれ。
作成:市川(ichikawa@soft.iwate-pu.ac.jp) 2005/04/25