如何调试DLL中的代码

How to debug the code inside the DLL

本文关键字:DLL 代码 调试 何调试      更新时间:2023-10-16

我有一个C#程序,我从中调用C++中的一些函数/变量。C++程序本身运行良好,并经过检查。但是,当我构建这个DLL并将其用于C#时,接口代码中存在一些错误,使我无法在C#中获得正确的结果。

最有可能的是,在输出结果的导出变量/导出函数中出现了一些错误,我想对此进行检查。

我的主要问题是:我如何调试这个DLL,比如在中设置断点等,然后像对待任何其他程序一样看到结果?

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

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

调试这类场景的最佳方法是使用Visual Studio混合模式调试(通过devenv/debug exe yourapp.name.exe命令)或使用Windbg+SOS扩展(学习曲线更陡,但这会显示更多信息,就像在本机代码和托管代码中键入大小一样)要了解如何使用Windbg+SOS,请参阅Mario Hewardt 的高级.NET调试

请注意,这类问题通常是由1) 错误地选择了要与C++API一起使用的C#数据类型2) 指定不正确/未指定的函数调用约定http://blogs.msdn.com/b/adam_nathan/archive/2003/05/21/56690.aspx