【问题标题】:App is crashing while trying to debug it [corruption heap] [closed]应用程序在尝试调试时崩溃[损坏堆] [关闭]
【发布时间】:2011-07-24 13:01:58
【问题描述】:

我有以下问题:

我有一个命令行应用程序。当我从命令行运行它时,它工作正常,但是当我尝试调试它时,我收到以下消息:

*Windows 在 orb_app.exe 中触发了断点。这可能是由于堆损坏,这表明 orb_app.exe 或其已加载的任何 DLL 中存在错误。*

应用程序正在使用 CORBA 协议的 omniORB 实现与远程应用程序交互。 编译器:微软 C++ 2003 操作系统:Windows 2003

我无法调试我的应用程序的原因是什么?

【问题讨论】:

  • 应用程序可能运行良好,但仍会破坏堆。为什么说不能调试呢?您是否尝试过跟踪和修复堆损坏?如果损坏发生在不属于您的 DLL 中,您是否检查过您是否以与没有它的调试器相同的方式运行它(相同的命令行参数,相同的工作目录)?您是否有可能为您的 DLL 提供了一个太长的字符串?我曾经在 corba 实现中遇到过这种情况,它正在注销字符串的末尾,因为我给它的主机名太长了。
  • 您是从命令行运行调试版本还是发布版本?调试版本包含各种检查,旨在检测堆损坏等。在发布版本中,您仍然有相同的错误,但如果您的特定错误不会以导致程序崩溃的方式损坏数据,您可能会(不)走运。因此,如果您在调试器中看到此错误 - 您有一个错误。在发布时看不到它只是意味着它被很好地隐藏了 - 对于您的代码和数据的当前版本。
  • 当我尝试调试它时,我在 CORBA 库 Send 方法上遇到了堆损坏。但无法确定原因,因为它可能在第一次请求之后立即崩溃,而下一次可能是第二次或第三次请求。我在调试器中使用了相同的参数,当我在没有调试器的情况下从命令行运行它时。
  • 我使用调试版本。我从命令行和调试器中运行它

标签: c++ visual-studio debugging crash


【解决方案1】:

问题解决了。使用选项 /MDd 代替 /MD 来生成完整的调试信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2015-10-10
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多