在我的.NET代码通过dllimport调用非托管dll中的函数之后,有没有办法调试正在发生的事情?
我在unmanaged via dllimport中暴露了一个dll函数.当我通过代码调用函数时,会发生一些事情并且它永远不会返回.
有什么我可以做的,可能有调试视图或任何东西来获取任何信息?或者我是SOL?
好吧,对于初学者,请确保在项目属性的"调试"选项卡中启用了本机代码调试.
如果您有要调用的DLL的源代码,那么您应该能够设置它,以便您可以像管理代码一样步入本机DLL.最简单的方法是在同一解决方案中添加本机DLL的源代码,然后链接到该项目的输出.您需要确保Visual Studio在运行C#应用程序时可以访问本机DLL和该DLL的pdb.
如果您没有DLL的源代码,那么我建议在调用本机方法之前设置一个断点.然后,让程序继续并在一两秒后手动暂停程序.确保您仍然在查看调用本机DLL的相同线程,然后查看调用堆栈查看器.如果看到一行显示"[外部代码]",请确保在上下文菜单中选中"显示外部代码".选中该选项后,调用堆栈可能会告诉您当前正在执行的方法.文本将显示为灰色,表示该方法位于外部DLL中.如果您正在进行Windows方法调用,则首先安装Windows符号文件可能允许调试器为您提供更多信息(http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx).您还可以多次暂停和继续调试器,以查看调用堆栈在各个执行点的外观.从这些信息中,您可以了解出了什么问题.
另外,尝试传递不同的参数,从最简单的情况开始,看看你是否得到了相同的行为.最后,请确保您的所有编组元数据都正确无误.
| 归档时间: |
|
| 查看次数: |
1736 次 |
| 最近记录: |