有没有办法调试从C#DllImport调用的c ++ dll?

我想知道是否有任何方法可以在VS 2010中调试从C#PInvoke调用的c ++ dll。我试图将项目附加到c#应用程序但是它没有工作 – 没有停在断点处。

我还尝试在C ++项目中使用OutputDebugString记录任何内容,但没有使用PInvoke调用打印。 尽管存在这些问题,但实际function运行良好。

任何建议将被认真考虑。

两者都需要打开相同的选项:项目>属性>调试选项卡>勾选“启用非托管代码调试”选项。

您现在可以在本机DLL代码中设置断点,只要C#项目加载DLL,它就会从空洞变为实心。 由于使用了非托管调试引擎,OutputDebugString()输出将转到Output窗口。

如果在程序运行时运行C ++调试器,然后转到Debug-> Attach To Process->找到您的进程并附加到它。 你应该能够调试它。

确保已使用调试器符号编译DLL。 (.pdb)文件,它们位于运行目录的目录中。

附加时,将“附加到”值更改为“本机”。 该进程不应在托管代码调试器下运行 – 而不是“调试”,请使用“运行”命令启动。

此外,DLL需要使用调试信息进行编译,以便进行任何合理的调试。 确保您没有P / Invoking Release版本。

但是,无论调试模式如何,OutputDebugString()都应该可以工作。