【问题标题】:Debug an issue in an underlying C++ DLL调试底层 C++ DLL 中的问题
【发布时间】:2013-04-04 20:55:41
【问题描述】:

我有一个主应用程序(在 C# 中),它解析图像数据库,然后将这些图像通过管道传输到 C++ DLL 中进行分析。现在由于某种原因,每 200 张左右的图像就会引发一个错误。它并不总是在同一张图像上引发错误,而只是在随机图像上引发错误(有时图像会通过分析,其他时候则会引发错误)。

我能否以某种方式使我的 DLL 向 C# GUI 抛出异常,并提供有关 C++ 代码中错误源自何处的信息?代码本身应该可以正常运行,但我找不到错误的来源,因此我需要 DLL 的帮助来确定它至少发生在哪里。

任何帮助将不胜感激,到目前为止我没有找到任何帮助。

【问题讨论】:

  • 您是否有权访问 DLL 的源代码?如果没有,那就没有。
  • 或者,至少是符号文件。尝试捕获转储并通过 WinDbg 运行它
  • 能否在 Visual Studio 中启用反汇编查看,以便在发生错误时调试 C++ DLL?
  • 我可以访问所有内容,它是我的 DLL。我用失败的图像循环运行代码 350 次迭代,但它没有出错。
  • @MartinParkin 我只在GUI捕获异常时看到错误,不知道什么时候会发生

标签: c# c++ debugging dll


【解决方案1】:

只需使用调试器来诊断。使用 Project + Properties 的 Debug 选项卡启用非托管调试器,勾选“启用非托管代码调试”选项。

“它会引发错误”过于模糊,无法给出具体建议。但是您需要检查 Debug + Exceptions 对话框中的 Throw 复选框。根据抛出的异常类型,勾选“C++ 异常”和/或“Win32 异常”。如果您不知道,请勾选所有选项。

【讨论】:

    【解决方案2】:

    如果您在调试时无法得到错误,请在您的 C++ dll 中写入以输出您所在的函数。

    例如,如果您在 dll 中有 func1、func2、func3,则每次进入和退出每个函数时都要写出它们的名称。当您运行程序时,您将能够将其范围缩小到导致异常的函数,然后您可以在函数的每一行之后添加类似的输出,以查找引发异常的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2017-12-20
      • 2010-11-06
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多