【问题标题】:Debugging Delphi Application on Non Development Environment在非开发环境中调试 Delphi 应用程序
【发布时间】:2009-02-19 15:27:39
【问题描述】:

我正在尝试使用 WinDBG 或其他调试器在远程计算机上调试 CodeGear Delphi 2007 Windows 应用程序。我一直无法为 WinDBG 生成符号文件。

有没有办法使用 WinDBG 或其他调试器在不包含 IDE 的系统上调试 Delphi 应用程序?

编辑1

远程调试器在这里不是一个选项。我可以远程访问最终用户 PC,但由于防火墙限制,我无法使用远程调试器。

编辑2

我可以远程进入机器,但由于防火墙限制,无法连接 CodeGear 远程调试器。

【问题讨论】:

    标签: delphi debugging windbg


    【解决方案1】:

    远程调试器怎么样?使用远程调试符号构建您的应用,并通过网络从您的开发机器进行调试。

    【讨论】:

    • 我希望能够做到这一点,但遗憾的是另一台机器位于完全不同的网络上,有防火墙限制。
    • 我已经能够远程连接到 PC,但我无法通过 TCP\IP 连接远程调试器。我正在寻找类似于 WinDBG 的东西来通过 GUI 对应用程序进行故障排除,因为我无法直接连接调试器。
    • 如果不能远程连接,那我喜欢X-Ray的想法。疯狂除了岩石。
    【解决方案2】:

    相反,我依赖于 MadExcept 堆栈跟踪和一些日志记录功能。我的应用程序分布在全球范围内,这已经足够了。

    【讨论】:

    • 我对该产品进行了更多研究,对它的功能印象深刻!遗憾的是,应用程序没有崩溃。我需要一种方法来转储内存或遍历应用程序以捕获发生的更合乎逻辑的错误。不过感谢您提供有趣的产品!
    【解决方案3】:

    您可以尝试生成地图文件,然后使用 map2dbg 将其转换为 dbg 文件 http://code.google.com/p/map2dbg/

    然后就可以在WinDbg中加载dbg文件了。

    免责声明:我遇到过类似的问题,但我设法进行了远程调试,而不必做所有这些。所以我不确定这会奏效。但是,如果您尝试过,请告诉我们它是否有效。

    【讨论】:

    • 我昨天看了很多次,发现它还不兼容Delphi。如果你有更多关于它的信息,这将是完美的。
    【解决方案4】:

    恐怕这是“我没有实际答案”的答案之一,但它可能只是帮助......

    您是否考虑过将日志记录添加到您的应用程序中?我听说过关于SmartInspect 的好消息。有了它,您可以记录各种信息,包括堆栈跟踪和“监视”(变量)。

    另一个用于 Delphi 的日志记录产品是 EurekaLog

    【讨论】:

    • 我可以确认 SmartInspect 是一个非常可靠的解决方案。好的,您不能使用它进行单步调试,日志记录非常好且先进。
    【解决方案5】:

    在 Delphi 中,您可以使用 Run -> Attach to Process,选择远程计算机并选择您要调试的进程。

    【讨论】:

    • ...假设目标机器正在运行远程调试器。
    • 我从来没有使用过这个“程序”,所以我没有想到。谢谢你直截了当,至少“我”学到了一些东西。
    【解决方案6】:

    http://sourceforge.net/projects/tds2dbg/ 可用于将Delphi 的TDS 调试文件转换为DBG 文件。这给出了基本的符号信息——函数、类、单位,但不是变量。足够一个合理的调用堆栈,并且有一点知识,足以实时调试 Delphi 应用程序和转储。

    我在博客上写过一些关于 Delphi+WinDBG 的经验:https://marc.durdin.net/2015/11/windbg-and-delphi-a-collection-of-posts/

    【讨论】:

      【解决方案7】:

      感谢大家的精彩建议和有趣的产品。

      为了解决这个特定问题,我发现的“最佳”方法是使用位于 Windows 命名空间中的 OutputDebugString。这与Debug View from Sysinternals 一起,将允许我收集调试信息并很快对其进行排序。

      如果您决定使用此方法,请确保所有内容都以 ANSI 格式包装。即:

      OutputDebugString(PAnsiChar(string1 + string2));
      

      这可以确保 string1 和 string2 组合在一起,然后转换为 ANSI 字符。

      我可能应该刚刚开始将文本转储到文件中以获得快速而肮脏的东西,但这将允许非调试版本发出调试消息。

      【讨论】:

      • 我想让这个问题多留几天,看看我们是否能得到比这更好的答案来实际连接调试器。
      猜你喜欢
      • 1970-01-01
      • 2014-11-02
      • 2012-02-13
      • 2021-08-07
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多