如何调试DLL中的代码
How to debug the code inside the DLL
我有一个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
相关文章:
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 代码在 msvcrt .dll函数上设置断点失败
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 由于找不到cpprest_2_10.dll,代码执行无法继续
- 可以从本机代码(如C++/Delphi)中使用.netCore DLL
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- CPP DLL 自定义操作代码在安装过程中未执行
- 在注入的 Dll 的 DllMain 中运行代码导致注入超时
- 通过 dll 注入在主线程中执行代码
- C++端口监视器 (mfilemon.dll) RDP 虚拟通道代码未执行
- C++ dll 在 C# 代码中抛出 EntryPointNotFoundException
- jvm.dll 上的加载库失败,错误代码为 183
- 将代码移动到函数中时,DLL "myApp.exe"中找不到序号错误0xC0000138
- 尝试将 c++ dll 导入 c 尖锐代码
- VC++ dll 代码区域未更新:VS2010
- 将 c# asp.net Web 应用程序与C++ dll 链接时,是在服务器或客户端上运行的 dll 代码
- 在可执行文件中插入dll代码,使其不受依赖
- 调用本机(DLL)代码从Java使用JNI保持变量c++初始化每个新的召回函数
- 使用DLL代码时堆损坏