9

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

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

编辑1

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

编辑2

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

4

7 回答 7

6

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

于 2009-02-19T15:36:01.160 回答
5

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

于 2009-02-19T17:42:09.423 回答
4

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

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

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

于 2009-02-19T20:04:44.967 回答
2

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

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

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

于 2009-02-19T21:37:11.317 回答
1

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

于 2009-02-19T15:36:02.160 回答
1

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

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

于 2015-11-29T22:31:15.057 回答
0

谢谢大家的好建议和有趣的产品。

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

如果您决定使用此方法,请确保所有内容都包含在 ANSI 格式中。IE:

OutputDebugString(PAnsiChar(string1 + string2));

这确保了 string1 和 string2 被组合,然后转换为 ANSI 字符。

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

于 2009-02-20T14:45:19.523 回答