2009-05-22 13 views
4

win32 API関数へのinterop呼び出しを使用している.netプロセスから例外が発生します。 デバッガが接続されていて、LastErrorの値を確認したいのですが。 Visual StudioデバッガからLastErrorの値を確認することはできますか?LastErrorの値を見つける方法.netプロセスをデバッグするとき?

2つの注意:例外をスローするプロセスは私のものではなく、ソースコードを変更してLastErrorの値を取得することはできません。
私はVisual Studio 2010のベータ版を使用しています。私は、VS 2008で動作するソリューションは2010年に動作すると仮定しています。

ありがとうございました。

答えて

9

Marshal.GetLastWin32Error()に電話して、最後のWindows APIエラーメッセージを表示することができます。これは、(P/Invokeを使用するのとは対照的に)推奨される方法です。

「GetLastWin32Errorは、Kernel32.DLLからWin32 GetLastError APIメソッドを公開します。このメソッドは、この情報を取得するためにGetLastErrorに直接プラットフォーム呼び出しを呼び出すことは安全ではないため、存在します。 GetLastErrorの独自のプラットフォーム呼び出し定義を記述して呼び出すのではなく、GetLastWin32Errorを呼び出す必要があります。共通言語ランタイムは、オペレーティングシステムがGetLastErrorを保持しているAPIを内部的に呼び出すことができます。ソースを変更していないという点でも

、:

これは、Visual Studioのイミディエイトウィンドウで動作しますが、P /呼び出しコールがDllImportAttribute.SetLastErrorで飾られた提供しました。しかし、Windows APIへのP/Invoke呼び出しでその属性が見つからなかった場合、マーシャリングAPIがGetLastErrorの値を上書きして表示する可能性が非常に高いので、やや不運になります。

+0

Marshal.GetLastWin32Error() - C#..のデバッグ中にデバッガ(ウォッチウィンドウ)で動作します - VS2010-Ultimate – hB0

3

「$エラー」(this question参照)を見てみてください。また、P/Invoke呼び出しに "SetLastError"を追加する方法については、this questionを参照してください。

関連する問題