在非开发环境中调试Delphi应用程序

时间:2009-02-19 15:27:40

标签: delphi debugging windbg

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

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

EDIT1

此处不支持远程调试器。我可以远程访问最终用户PC,但由于防火墙限制,我无法使用远程调试器。

EDIT2

我能够远程访问机器,但由于防火墙限制,无法连接CodeGear远程调试器。

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

相反,我依赖于MadExcept堆栈跟踪和一些日志记录功能。我的申请分发到全世界。这已经足够了。

答案 2 :(得分:4)

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

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

免责声明:我遇到了类似的问题,但我设法做了远程调试,并没有做到这一切。所以我不确定这是否有效。但如果您尝试它,请告诉我们它是否有效。

答案 3 :(得分:2)

我担心这是“我没有实际答案”的答案中的一个,但可能只是帮助......

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

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

答案 4 :(得分:1)

在Delphi中你可以使用Run - >附加到Process,选择远程机器并选择您要调试的过程。

答案 5 :(得分:0)

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

要解决此特定问题,我找到的“最佳”方法是使用位于 Windows 命名空间中的 OutputDebugString 。这与Debug View from Sysinternals一起,将允许我收集调试信息并快速排序。

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

OutputDebugString(PAnsiChar(string1 + string2));

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

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

答案 6 :(得分:0)

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

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