用于调试远程计算机上的问题的技术和工具?

时间:2011-07-17 03:19:52

标签: delphi debugging

用户一直在报告我无法在我的机器上重现的问题/崩溃/错误。我发现这些问题很难解决。

我已经开始使用EurekaLog(太棒了!)和SmartInspect。这两种工具都有很大的帮助,但我仍然发现很难发现一些问题。

我刚刚购买了Debugging by David Agans(等待它到达)。

是否还有其他特定于Delphi的工具或技术有助于捕捉这些难以发现的远程问题?我发现难以追查的问题是那些不引起例外或有明确原因的问题。 EurekaLog捕获异常,一旦我有理论检查,SmartInspect就相当不错了。但在某些情况下,这是一个看似随机的崩溃,有几千行代码可能有问题。如何缩小根本原因?

4 个答案:

答案 0 :(得分:12)

MadExcept是我使用的,它很棒。我还使用了EurekaLog,发现功能几乎完全相同,只是我有更多的经验和时间使用MadExcept。它是免费的非商业用途,价格合理,适合商业用途。 更新:MadExcept 4现已推出,甚至支持64位Delphi XE2应用,并且还有内存泄漏检查。

当没有任何东西爆炸时,我依赖大量使用跟踪记录。我有一个TraceMessage(整数,字符串)函数,我在所有应用程序中调用,当有人遇到问题时,我让他们单击一个菜单项,将调试跟踪级别调到最详细的级别;它为我提供了我的应用程序所做的所有事情的完整历史记录,这帮助我解决了客户网站上的问题。客户遇到崩溃,由madexcept发送的崩溃报告包含一个自动附加的日志文件(由我的应用程序创建)。我相信你可以用madExcept和EurekaLog同样做得很好。如果您需要一个日志系统,您可以下载Log4D,或者您可以自己编写,这很简单。

对于永远免费的,尝试JclDebug,这需要更多的工作来设置,但也为我做了很棒的工作。

有关堆问题的帮助,请了解有关fastMM(完整版)调试选项的更多信息。

您不应忘记Delphi本身支持远程调试,如果您可以在办公室中没有安装delphi的机器上重现崩溃,请在办公室网络中使用远程调试,而不是安装完整的RAD Studio安装在你工作的那台机器上。你也可以使用远程调试连接到互联网上的客户端PC计算机,但我还没有尝试过互联网远程调试,所以我不能说它是否在互联网上运行良好。我知道,因为远程调试不支持自动部署你构建的EXE文件(你必须自己做这部分),通过互联网进行远程调试,到客户端PC是更多的工作。

您可能还会通过修复所有提示和警告,然后使用Peganza的CodeHealer或Pascal Analyzer(PAL)来找到许多问题。这些静态分析工具可以帮助您找到真正的代码问题。

如果性能和内存使用是您的问题,请获取完整版AQTime,并使用它来分析和观察您的系统运行情况。它将帮助您修复内存泄漏,并了解应用程序的运行时行为和内存使用情况,而不仅仅是泄漏,而是内存和CPU使用的瓶颈。其中一些瓶颈也可能是一些奇怪问题的根源。我甚至使用AQTime来帮助我找到死锁,因为它可以生成执行痕迹,可以帮助我找出正在运行的代码,并找到死锁。 更新:AQTime无法安装在主设备以外的计算机上,不会违反新修改的AQTime许可条款。在过去的好时光里,这些条款从来都不是限制性的。

如果你更准确地了解你的问题是什么,我相信其他人可以给你一些更具体的想法,但所有这些都是能够很好地帮助我的一般技术。

答案 1 :(得分:7)

最好的方法之一是使用Delphi附带的Remote Debugger,这样您就可以直接调试远程计算机上运行的应用程序。远程调试器在某些Delphi版本中有些错误,并且需要仔细按照说明进行操作,但是在需要时它是一个需要考虑的工具。还要检查您的版本是否有可用的更新,它们可以单独安装在“远程”系统上进行部署。否则,首先安装远程调试器,然后检查安装的文件是否在本地安装中具有较新版本,以及远程计算机上是否包含copy tehm。

答案 2 :(得分:6)

在这些情况下,

CodeSite给了我很多帮助。自XE以来它与Delphi捆绑在一起。

答案 3 :(得分:4)

在这件事上,记录是关键。

查看我们的Open Source SynCommons library中提供的TSynLog课程。

它具有JCL Debug / MadExcept功能,还有一些额外功能(如客户端分析和日志记录):

  • 使用一组级别进行日志记录;
  • 快速,低执行开销;
  • 可以加载要用于记录的.map文件符号;
  • 将.map压缩为二进制.mab(900 KB - > 70 KB);
  • 将.map / .mab包含在.exe;
  • 读取外部.map,将单位名称和行号添加到日志文件中,执行时没有.map可用信息;
  • 例外记录(Delphi或低级别例外)单位名称和行号;
  • 带有单位和行号的可选堆栈跟踪;
  • 方法或程序递归跟踪,使用Enter键和自动保留使用接口;
  • 应用程序执行的高分辨率时间戳,用于客户端分析;
  • set / enumerates / TList / TPersistent / TObjectList / TContainer / dynamic array JSON序列化;
  • 每线程或全局日志记录;
  • 同一进程中的多个日志文件;
  • 集成日志存档(采用zip或任何其他格式);
  • 开源,从 Delphi 5到XE
相关问题