著者
小菅 圭介 佐藤 規男
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.2, no.3, pp.60-60, 2009-07-10

Python あるいは Ruby のようなスクリプト言語のデバッガは,コールバック関数指定時に,インタープリタが line,call,return などのトレースイベントを通知するために起こすコールバックを解析することにより,ブレークやステップなどのデバッグイベントを検出する.しかし,トレースイベントごとのコールバックは,デバッギの仮想マシンコードの実行速度を 2 桁あるいは 3 桁オーダで著しく低下させてしまうという欠点がある.これは,大規模プログラムの効率良いデバッグの妨げとなる.そこで,インタープリタが提供すべき新しいデバッガサポートを提案する.このサポートでは,基本的にコールバックの生成は何らかのデバッグイベントをインタープリタ内部で検出したときのみに限定する.このサポートを利用すると,デバッギコードをほぼフル速度で実行したまま,デバッグイベントを検出することができる.我々はこのサポートとデバッガを CPython インタープリタと我々がオープンソースとして提供している非同期型デバッガ Dionea に実装した.TurboGears の Depot システムで実験した結果,デバッギのほぼフルスピードの走行とデバッガ反応速度の飛躍的向上を確認した.Debuggers for scripting languages such as Python or Ruby detect the debug events such as break or step hit by analyzing the callbacks that are raised by the interpreter to report the trace events such as a new line, call and return. A drawback of the callback for each trace event is to slow down the execution speed of the debuggee virtual machine code seriously by two or three orders of magnitude. This prevents efficient debugging for large programs. We therefore propose a new debugger support that the interpreter should provide, with which the callback is raised basically when and only when some debug event is detected inside of the interpreter. Using this support, the debugger can detect the debug events while the debugged code is running almost at full speed. We have implemented the proposed support in the CPython interpreter and applied it to the asynchronous debugger Dionea which we deliver as an open source project. A measurement using test programs and a TurboGears Depot system shows almost full speed execution of the debugee and remarkable response time improvement of the debugger.