gpt4 book ai didi

c# - 在我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后,有什么方法可以调试发生了什么?

转载 作者:太空狗 更新时间:2023-10-30 00:59:06 29 4
gpt4 key购买 nike

有什么方法可以调试我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后发生的情况?

我通过 dllimport 在非托管中公开了一个 dll 函数。当我在单步执行代码时调用一个函数时,发生了一些事情并且它永远不会返回。

有什么我可以做的吗,也许是使用调试 View 或其他任何方法来获取任何信息?或者我是 SOL?

最佳答案

首先,请确保您在项目属性的“调试”选项卡中启用了 native 代码调试。

如果您拥有要调用的 DLL 的源代码,那么您应该能够对其进行设置,以便您可以像进入托管代码一样进入 native DLL。最简单的方法是在同一解决方案中添加 native DLL 的源代码,然后链接到该项目的输出。您需要确保 Visual Studio 在运行 C# 应用程序时可以访问 native DLL 和该 DLL 的 pdb。

如果您没有 DLL 的源代码,那么我建议在调用 native 方法之前设置一个断点。然后,让程序继续并在一两秒后手动暂停程序。确保您仍在查看调用 native DLL 的同一线程,然后查看调用堆栈查看器。如果您看到一行“[外部代码]”,请确保在上下文菜单中选中“显示外部代码”。选中后,调用堆栈可能会告诉您当前正在执行什么方法。文本将呈灰色,表示该方法在外部 DLL 中。如果您正在进行 Windows 方法调用,那么首先安装 Windows 符号文件可能允许调试器为您提供更多信息 (http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)。您还可以多次暂停并继续调试器,以查看调用堆栈在不同执行点的样子。从这些信息中,您可能能够了解哪里出了问题。

此外,尝试传递不同的参数,从最简单的情况开始,看看是否会出现相同的行为。最后,绝对确保您的所有编码元数据都是正确的。

关于c# - 在我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后,有什么方法可以调试发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1338559/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com