25

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

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

任何建议将被认真考虑。

4

3 回答 3

46

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

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

于 2012-09-20T16:41:24.390 回答
3

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

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

于 2012-09-20T16:41:08.500 回答
2

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

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

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

于 2012-09-20T16:41:13.623 回答