2012-02-27 63 views
1

代码里面有从我打电话从C++的一些函数/变量C#程序。 C++程序本身运行良好,并进行检查。但是,当我构建这个DLL并将它用于C#时,接口代码中存在一些阻止我在C#中获得正确结果的错误。我如何调试DLL

最有可能,有出口变量/导出函数给出来的结果,我要检查一些错误。

我的主要问题是:如何通过把断点等,并沿看到的结果如下,我们可以为任何其他程序做调试这个DLL,如?

回答

2

假设您具有本机(C++)DLL的源代码和调试符号,可以在托管(C#)EXE项目的“调试”选项卡上选中“启用非托管代码调试”选项,然后设置断点像往常一样在C++代码中检查变量等。您可以将C++项目添加到解决方案,或者只需打开一个C++源代码文件并在那里设置断点。

+0

我的C++项目在解决方案中,并设置了所有的断点。我在C#exe项目中的Debug Tab下勾选了'Enable Unmanaged code debugging option',但是当我开始调试时C++中的断点被禁用了(并且悬停在它们上面,工具提示信息是:'断点不会被命中。已加载此文档“) – Cipher 2012-02-27 10:43:13

+0

其实是的!这工作!谢谢 – Cipher 2012-02-27 10:45:27

1

如果你想调试DLL,你应该在你的C++环境中工作,把断点放在你的C++代码中,但是使用由c#生成的可执行文件。

0

调试这种情况下的最佳方法,是通过使用Visual Studio混合模式调试或者(经由devenv的/ debugexe yourapp.name.exe命令),或者使用的Windbg + SOS扩展(陡峭的学习曲线,但是这会表现出更多的信息,比如你键入本地的大小和托管代码) 要了解如何使用WinDbg + SOS,请参阅高级.NET调试由马里奥·赫沃特

注意,往往这些类型的问题所引起通过 1)错误地选择C#数据类型以与C++ API一起使用 2)错误地指定/未指定的函数调用约定 http://blogs.msdn.com/b/adam_nathan/archive/2003/05/21/56690.aspx