在disassemby视图中进入P/Invoke调用

Joe*_*ite 11 debugging pinvoke step-into visual-studio

我的C#代码通过P/Invoke调用非托管第三方库函数,非托管函数有一些奇怪的副作用.我想调试它,看看它在做什么.

如果我调试我的C#代码,并尝试"逐步进入"P/Invoke调用,它将转而执行.这并不奇怪 - 我预料到了; 它没有这个DLL的源代码,我没有告诉它我看到反汇编视图是可以的.

所以我将调试器切换到反汇编视图(Debug> Windows> Disassembly).现在我在JITted代码中看到了各个x86指令.我再次尝试进入P/Invoke调用.再次,它反过来 - 即使我明确告诉它Step Into a x86 CALL指令.进入x86 CALL有多难?

到目前为止,我的谷歌搜索向我展示了几个可以影响这一点的选项,我已经设置了它们:

  • 在工具>选项>调试>常规中,取消选中"仅启用我的代码".
  • 在项目>属性>调试选项卡中,选中"启用非托管代码调试".

不好.Visual Studio仍然拒绝介入.

我没有第三方DLL的PDB,但这不重要.我不关心源代码或符号信息.(嗯,实际上他们真的很好,但我已经知道我不会得到它们.)Visual Studio可以进行x86调试(这就是反汇编视图的用途),而我想做的就是进入x86代码.

还有什么办法可以让VS让我进入P/Invoke调用中的x86指令?

Ðаn*_*Ðаn 1

我会尝试的一件事是从 C# 转到 C++/CLI 代码,然后从 C++ 转到第三方代码。一旦您使用 C++(并且摆脱了 P/Invoke 基础结构),您可能会更幸运地使用反汇编视图。