ページ

2009年5月22日金曜日

[VS2010] マネージドコードのダンプデバッグと IL インタープリタ

Virtual code execution via IL interpretation
「Visual Studio 2010 Beta 1 にはマネージドコードのダンプファイルデバッグと今からブログに書くすんげー機能が含まれてるよ」 なんて感じで始まってるんですが。。。

ダンプファイルデバッグっていうのは、「CLR 4.0 advancements in diagnostics」 にクラッシュダンプファイルを Visual Studio で開くとマネージドの状態 (スタックとかローカル変数とか) を見ることができる、とかなんとか書いてあるんですが、つまりそういうことだよね?
うっひゃー、これはうれしいな。

で、
「ダンプデバッグはとても便利だし、長いことリクエストされてた機能だけど、ダンプファイルといっしょにプロセスが生きているわけじゃないので property-evaluation は動かない。property-evaluation はファンクションだとか ToString() だとかプロパティのゲッターだとかが実行されているスレッドをデバッガが乗っ取るっていう仕組みだからね。ダンプデバッグするときには乗っ取るスレッドはもう動いてないし」
なんてことが書かれてます。(超いいかげんな訳)
ようするに、デバッガでプロパティの値を見たりする機能は、対象となるプロセスが動いていることを前提としてるってことなんでしょう。

で、
「ダンプファイルのロードに加えて、ファンクションの IL オペコードをインタープリタで動かして、実行をシミュレートできるようにした。デバッガで結果を表示できるように」
なんてあります。
(原文が太文字になってるところを同じく太文字にした)
おぉ、すげぇ、まじっすか!

簡単なサンプルコードが載ってて、その下に 「Main() の終わりのところで止めて、”Debug - Save Dump As ...” でダンプファイルを書き出して、”File ? Open ? File ...” でダンプを読み込んでみるべし」 とあります。
「普通なら dict, p といったローカル変数と生フィールドが見えるけど、プロパティの内容とか ToString() した値とかは見れない。こんな風にね」
と、キャプチャした画像が載ってます。

「しかし、インタープリタがあれば、実行をシミュレーションできる。ウォッチウインドウを見てみるべし」
ということで、ウォッチウインドウのキャプチャ画像があります。
これの Value の 「Count = 0x00000002*」 のように最後に “*” が付いているのが IL インタープリタによってシミュレーション実行して求めた値だそうです。

以降、「どうやって動いてる?」 とか 「他にできること」 といった解説が続いてます。

うっひゃー、これは確かにすごいや。
なんか他のことにも使えそうな気がする。
ところで、ダンプじゃなく普通にステップ実行するときに IL レベルでステップってできるようになったのかな?
今までってソースの下はすぐ JIT 後のアセンブラだったよね?
IL でステップしてみたいと思うことがあるんだけどな。


0 件のコメント:

コメントを投稿