我的C#代码通过P/Invoke调用非托管第三方库函数,而非托管函数有一些奇怪的副作用。我想调试它,看看它在做什么。在反汇编视图中进入P/Invoke调用
如果我调试我的C#代码,并尝试“步入”P/Invoke调用,它会逐步完成。那里并不令人意外 - 我预料到了;它没有这个DLL的源代码,我没有告诉它看到反汇编视图时没问题。
因此,我将调试器切换到反汇编视图(调试> Windows>反汇编)。现在我看到我的JITted代码中的单个x86指令。我再次尝试进入P/Invoke调用。再一次,它逐步完成 - 即使我明确地告诉它Step Into x86 CALL指令。进入x86 CALL有多难?
我的谷歌搜索迄今已经指示我几个可能影响此选项,并且我已经将它们设置:
- 在工具>选项>调试>常规,“启用仅我的代码”是选中。
- 在项目>属性>调试选项卡中,选中“启用非托管代码调试”。
不好。 Visual Studio仍拒绝介入。
我没有用于第三方DLL的PDB,但这应该不重要。我不关心源代码或符号信息。 (嗯,实际上他们会非常好,但我已经知道我不会得到它们)。Visual Studio可以执行x86调试(这就是反汇编视图对于),我想要做的就是步入x86代码。
我还需要做什么才能让VS让我步入P/Invoke调用中的x86指令?
你有没有想过这个? – Dennis 2013-11-11 22:05:00
自从我尝试这么做已经有几年了,但是据我回忆,不,我从来没有把它付诸实施。 – 2013-11-12 03:58:15