我正在尝试使用 WinDBG 或其他调试器在远程机器上调试 CodeGear Delphi 2007 Windows 应用程序。我一直无法为 WinDBG 生成符号文件。
有没有办法使用 WinDBG 或其他调试器在不包含 IDE 的系统上调试 Delphi 应用程序?
编辑1
远程调试器在这里不是一个选项。我可以远程访问最终用户 PC,但由于防火墙限制,我无法使用远程调试器。
编辑2
我可以远程进入机器,但由于防火墙限制,无法连接 CodeGear 远程调试器。
远程调试器怎么样?使用远程调试符号构建您的应用程序,并通过网络从您的开发机器进行调试。
相反,我依赖于 MadExcept 堆栈跟踪和一些日志记录功能。我的应用程序分布在全球范围内,这已经足够了。
您可以尝试生成地图文件,然后使用 http://code.google.com/p/map2dbg/中的 map2dbg 将其转换为 dbg 文件
然后就可以在 WinDbg 中加载 dbg 文件了。
免责声明:我遇到过类似的问题,但我设法进行了远程调试,而不必做所有这些。所以我不确定这会奏效。但是,如果您尝试一下,请告诉我们它是否有效。
恐怕这是“我没有实际答案”的答案之一,但这可能会有所帮助...
您是否考虑过将日志记录添加到您的应用程序中?我听说过有关SmartInspect的好消息。有了它,您可以记录各种信息,包括堆栈跟踪和“监视”(变量)。
Delphi 的另一个日志记录产品是EurekaLog。
在 Delphi 中,您可以使用 Run -> Attach to Process,选择远程计算机并选择您要调试的进程。
http://sourceforge.net/projects/tds2dbg/可用于将Delphi 的TDS 调试文件转换为DBG 文件。这给出了基本的符号信息——函数、类、单位,但不是变量。足够一个合理的调用堆栈,并且有一点知识,足以实时调试 Delphi 应用程序和转储。
我在我的博客上写过一些关于 Delphi+WinDBG 的经验:https ://marc.durdin.net/2015/11/windbg-and-delphi-a-collection-of-posts/
谢谢大家的好建议和有趣的产品。
为了解决这个特定问题,我发现的“最佳”方法是使用位于Windows命名空间中的OutputDebugString。这与来自 Sysinternals 的 Debug View一起,将允许我收集调试信息并很快对其进行排序。
如果您决定使用此方法,请确保所有内容都包含在 ANSI 格式中。IE:
OutputDebugString(PAnsiChar(string1 + string2));
这确保了 string1 和 string2 被组合,然后转换为 ANSI 字符。
我可能应该刚刚开始将文本转储到文件中以获得快速而肮脏的东西,但这将允许非调试版本发出调试消息。