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

2024-03-28

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

我通过 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 http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)。您还可以多次暂停和继续调试器,以查看调用堆栈在各个执行点的情况。从这些信息中,您也许能够了解出了什么问题。

另外,尝试传递不同的参数,从最简单的情况开始,看看是否会得到相同的行为。最后,绝对确保所有编组元数据正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • VB6的默认字体从哪里获取

    VB6从哪里得到的default字体来自 是系统字体吗 是由地区决定的吗 无论实际字体如何 它的大小总是相同吗 应用程序的字体在Font控件的属性 VB6默认有MS 无衬线字体 大小 8 这是 Windows 95 98 中的默认系统字体
  • 根据内容调整iframe高度

    我正在使用以下脚本自动调整 iframe 高度 function autoIframe frameId try frame document getElementById frameId innerDoc frame contentDocu
  • PHP 中有从数组中提取“列”的函数吗?

    我有一个数组的数组 具有以下结构 array array page gt page1 name gt pagename1 array page gt page2 name gt pagename2 array page gt page3 n
  • 如何在 Raphael 中使用 eve() ?

    有人可以给我一个拉斐尔的简单例子吗eve 我不太明白参数以及如何调用事件 我查了一下 但好像用过的人不多 事件功能的简单示例Rapha l http www raphaeljs com 我们定义将触发事件的函数 function bar v
  • javascript 数组的范围从 IE9 到 FireFox/Chrome 有所不同

    我已经缩小了我的基本问题的范围 从 IE9 到 FireFox 和 Chrome 数组的范围有所不同 在以下函数 仅摘录 中 我声明一个数组 然后通过调用 getJSON 来填充它 因为引用 HoldEm 的行出现在 ProcessArra
  • 查找此 XML 文档中的值的正确 XPath 查询是什么?

    假设我有这个 XML 文档
  • 在 Node.js 中休眠

    假设没有 本地 方法来实现这一点 我的解决方案是 sleep function time var stop new Date getTime while new Date getTime lt stop time return new Pr
  • OleDBConnection 连接字符串

    当我尝试这段代码时OleDBConnection open 不起作用 没有抛出任何错误 只需打开 Windows 窗体并说出任何内容我看到 messageBox try1 但程序没有显示 try2 我的连接字符串有什么问题请帮助我也尝试过
  • 如何在单个 SELECT 查询中设置多个 T-SQL 变量?

    我有3个变量 testid sampleid and clientid 我该如何设置 sampleid and clientid通过执行此查询一次 SELECT sample sampleid client clientid FROM db
  • 现在使用 async/await 安全吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 Javascript 中使用 async await 代替安全吗 现在生成器承诺 知道语法尚未制定并且 会随着 ES8 的发布而出现吗 我可
  • Gnuplot - 使用带有 png 终端的 replot

    我正在尝试在 Gnuplot 中使用带有 png 终端的 replot 如果我执行以下操作 我会在一张图表上绘制两个图 没有任何问题 plot sin x x replot sin x 现在 如果对 png 终端类型执行相同操作 则生成的
  • ignite服务器重新连接后如何恢复缓存

    如果有人能帮助我 我真的很感激 我有一个用Java编写的ignite服务器 还有一个用C 编写的客户端 客户端可以连接到服务器 并且可以正确获取服务器的缓存 服务器重新启动后 客户端会收到来自服务器的 EVT CLIENT NODE REC
  • 如何在 Windows 中使用 Sphinx 创建 PDF 文档

    我正在使用 Sphinx 在 Windows 中为我的 Python 项目创建文档 我需要生成 PDF 文档 我发现了很多关于如何在 Linux 中执行此操作的解释 但没有很好的解释如何在 Windows 中执行此操作 据我了解 我需要使用
  • 如何在MatLab中求曲线上一点的法向量

    我有一条曲线 我想找到该曲线上给定点的法线向量 稍后我必须找到该法线向量与另一个向量的点积 我尝试了MatLab的梯度函数 但我想当我们需要在特定点找到梯度时它不起作用 但我不确定我是否错了 请指导我如何在 MatLab 中实现这一目标 提
  • 创建一个 NSArray,初始化为 N 个对象,所有对象都是同一个对象

    我想创建一个具有相同值的对象的 NSArray 比如 NSNumber 全部初始化为 1 但计数基于另一个变量 除了处理 C 风格数组的初始化器之外 似乎没有一种方法可以使用 NSArray 的任何初始化器来执行此操作 知道是否有一种简短的
  • 从另一个域获取发布的数据时,ASP.NET Webform 丢失会话

    Simply 在网站中 用户登录并创建一些会话对象 网站 A 使用 Response Redirect 将用户重定向到网站 B 中的页面 网站 B 使用提交按钮将表单集合发布到网站 A 上的页面 在此特定点上 该特定用户的所有会话都会丢失
  • 配置文件、证书、应用程序 ID 和密钥之间的关系

    现在我只是想在手机上测试我的应用程序 而不是部署到商店 所有这些事情是如何关联的 由于我不想上传到商店 我可以忽略其中任何一个吗 我参加了大学开发者计划 我能够获得证书并将其安装在 Xcode 中 但构建仍然失败 解决这个问题只是改变应用程
  • 在 python 中使用带有请求的自签名证书

    情况 目标站点 预产品 URL 例如https my pre prod site com login https my pre prod site com login 例如 正在使用自签名证书 从浏览器中 可以通过 https 访问该站点
  • 从 Ruby 列表中获取所有对的组合

    我有一个元素列表 例如数字 我想检索所有可能对的列表 我怎样才能使用 Ruby 做到这一点 Example l1 1 2 3 4 5 Result l2 gt 1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5
  • 有什么方法可以调试我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后发生的情况吗?

    有什么方法可以调试我的 NET 代码通过 dllimport 调用非托管 dll 中的函数后发生的情况吗 我通过 dllimport 在非托管内部公开了一个 dll 函数 当我在单步执行代码时调用函数时 会发生一些事情并且它永远不会返回 我