2012-02-21 10 views
11

this questionにお答えしているうちに、デバッガビューで手作業でマーシャリングプロセスを進める必要があると判断しました。Visual Studioで「管理からネイティブへの移行」を実行しますか?

残念ながら、Visual Studioはこの面白いコードのすべてを正しく実行しているようです。ここでGetProfilesDirectoryへのP /呼び出しコール(WinAPIの機能)があります:

enter image description here

が、このコール(F11)にステップインした後、私はFFF9BFD8で自分自身を見つけることができません。むしろ、私は右のGetProfilesDirectoryコードに上陸:Visual Studioは単にコードの全体の束を飛び越えたという事実を示唆し、また、スタック上の[Managed to Native Transition]エントリあります

enter image description here

この移行をどのように進めることができますか?

+5

まあまあ、私はすでに問題を発見:あなたは、コードエディタでの可変幅フォントを使用しています!それはただの狂気です。 –

+1

怖い!私の狂気に巻き込まれていないことを確かめるために、彼らが使うフォントを潜在的に雇うように頼んでください! –

答えて

3

デバッグウィンドウに外部コードを表示することを誰も示唆していないことに驚いています。 [ネイティブから管理された遷移]行を右クリックして[外部コードを表示]オプションを選択すると、遷移でどのメソッドが呼び出されているかが正確に分かります。これはあなたに良いアイデアを与えるかもしれません。

Display Native to Managed Transition

あなたはその後、任意の(グレーアウト)ラインとコードで開きますDisassemblyページをダブルクリックすることができます:ここでは一例です。別の例:

enter image description here

1

Visual Studioでは、VSデバッガをモードに切り替えて、管理からネイティブへの移行中に何が起こっているかを確認する方法がありません。

WinDBGはこれらの種類の詳細を隠すことはないので、代わりにWinDbg + SOS/SOSEXを試すことができます。しかし、その部分は.NETまたはWindowsの内部抽象であるため、実際に何が起こっているかを知るために(アセンブリ以外にも)mscorlib、mscoreeiのプライベートシンボルが必要です、またはclr dlls(pdbファイル)。