我的 C# 代码通过 P/Invoke 调用非托管的第三方库函数,并且非托管函数有一些奇怪的副作用。我想调试它,看看它在做什么。
如果我调试我的 C# 代码,并尝试“步入”P/Invoke 调用,它反而会跳过。这并不奇怪——我预料到了;它没有这个 DLL 的源代码,我也没有告诉它我可以看到反汇编视图。
所以我将调试器切换到反汇编视图(调试 > Windows > 反汇编)。现在我在我的 JITted 代码中看到了单独的 x86 指令。我再次尝试进入 P/Invoke 调用。再一次,它反而跳过了——尽管我清楚地告诉它步入 x86 CALL 指令。进入 x86 CALL 有多难?
到目前为止,我的谷歌搜索已经向我展示了几个可能会影响这一点的选项,我已经设置了它们:
- 在工具 > 选项 > 调试 > 常规中,未选中“仅启用我的代码”。
- 在 Project > Properties > Debug 选项卡中,选中“启用非托管代码调试”。
不好。Visual Studio 仍然拒绝介入。
我没有第三方 DLL 的 PDB,但这没关系。我不关心源代码或符号信息。(嗯,实际上它们会非常好,但我已经知道我不会得到它们。)Visual Studio 可以进行 x86 调试(这就是反汇编视图的用途),而我要做的就是进入x86 代码。
我还需要做什么才能让 VS 允许我在 P/Invoke 调用中进入 x86 指令?