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

时间:2012-09-20 16:38:13

标签: c# c++ pinvoke

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

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

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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

然而,无论调试模式如何,OutputDebugString()都应该有效。