Next: Up: Previous:

4.6.3 マルチスレッドライブラリの隠蔽(共通)

4.5.3節で述べたように, gdb とマルチスレッドライブラリの整合をコマンドラインレベルでは, 完全に整合する事はできない. 一部ランタイム上に置いて デバッグシステム側が gdb に対する step 実行を要請 する場面が存在する.この場合の コマンドライン から用いた場合と, Emacs を通して使った場合のそれぞれの対応を述べる.

まず,コマンドライン 上で gdb を使っている場合であるが, この場合, ユーザに対してstep実行を要請する事になる. 現在の実装では, step 実行が必要な部分に対して, 図4.8に載せた例のように, step 実行を要請するようなソースファイル上の行を設定, 行番号を対応させている. reply や 他ノードからの実行要請の場合も同じである. 一方,Emacsを通してgdbを用いているユーザに対しては, 自動的にEmacsがメッセージの無表示,step命令の発行をおこなう. これは, gdb がstep, next実行などで停止した場所が ランタイムに相当し,なおかつ,step 実行が要請されている場所である場合, Emacs lisp プログラム 側でそれと判断し, 自動的に step 実行を発行するものである. これにより,ユーザはランタイムの存在に惑わされる事なく, 4.2.2節で説明した通りの挙動を 見る事が出来る.


make_tree__FPt7channel1ZP7t_tree_i (r_96=0x95f30, n=1) at objc.lspd:25
25            (node (make-tree (- n 1)) (make-tree (- n 1)))))
(gdb) step/next
166     Type [S]tep Commands (in TOUCH operation)
(gdb) step
get_channel_aux__FPPt7channel1ZP7t_tree_PiiT0 () at objc.lspd:167
167     Type [S]tep Commands (in TOUCH operation: RUNTIME)
(gdb) step
make_tree__FPt7channel1ZP7t_tree_i (r_96=0x95f30, n=1) at objc.lspd:25
25            (node (make-tree (- n 1)) (make-tree (- n 1)))))


図4.8 コマンドライン 版での ユーザへのstep実行要請


Mitsubishi Research Institute,Inc.
Mon Feb 24 19:27:22 JST 1997