【问题标题】:VS2008/2010 debugger changes application behaviorVS2008/2010 调试器更改应用程序行为
【发布时间】:2010-07-20 12:57:03
【问题描述】:

我有一个非常简单的 Delphi 2010 dll,我从 Visiual Studio 2008 C ATL 控制台应用程序加载(MVF GUI 应用程序也不起作用)。当我直接从 IDE 调试控制台应用程序时 - 没有断点 - 应用程序的输出不正确,但是当我直接运行应用程序或使用调试器附加到进程时,它可以 100% 工作。从 Delphi 控制台应用程序调试相同的 dll(即从 IDE 运行它)也可以。

VS 调试器似乎会破坏应用程序,具体取决于您运行它的方式。 VS2010 也一样!

我已经 100% 确定了 - 好几次了! - dll 导出的数据类型和调用约定与控制台应用程序中的数据类型和调用约定匹配。我可以更详细地介绍,但我不想将此事与可能不相关的信息混淆。如果我提供的内容还不够,请告诉我是否必须详细说明代码。

有没有人经历过这种事情并且知道如何解决它?

【问题讨论】:

  • Gerhard,您检查过并行化问题/竞争条件吗? (这是一个多线程应用程序吗?)。此外,如果您使用 delphi/dll 等标记您的问题,您可能会针对更好的受众。
  • 两种情况的输出有什么区别?调试器改变了各种各样的东西;时间肯定会有所不同,但其他事情也可能有所不同。我们需要您提供一些额外信息,以便了解行为的不同方向。

标签: delphi debugging visual-studio-2008


【解决方案1】:

我曾经遇到过类似的问题(IDE/调试器和独立应用程序中的行为不同)。事实证明,我已经检查了未设置变量的值。调试器在以前使用的内存块中分配它(总是!),这样该值不为空并且应用程序正常工作(因为只有条件块是错误的)。但是,操作系统有时会将应用程序放入空的内存块(用 0 填充),条件失败,应用程序崩溃。

也许这就是问题所在?尝试使用 OutputDebugString() 在库运行时跟踪变量的值。如果没有一些源代码,我相信很难说,可能是什么原因。

最好的问候——Spook。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2010-11-22
    • 2010-09-28
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多