如何最好地使用IDE和/或FOSS调试Delphi?

如何最好地使用IDE和/或FOSS调试Delphi?,delphi,Delphi,我看到了下面的调试方法,我想知道是否还有其他方法,或者一家小公司可以使用哪些FOSS工具(我们不太做Windows编程) 1在IDE中通过设置断点、使用手表等进行调试 2使用事件日志在IDE中调试 我从中获得了一些很好的信息,并对其进行了调整,在过程调用/返回中添加了时间戳和缩进/缩进,以便更快地查看嵌套调用。有人知道更好的吗 3使用探查器 4还有其他的吗? 比如说疯狂等等 (我目前正在使用Delphi 7)不确定为什么要升级以调试问题。是的,较新的IDE提供了更多的功能来帮助您调试某些东西,但

我看到了下面的调试方法,我想知道是否还有其他方法,或者一家小公司可以使用哪些FOSS工具(我们不太做Windows编程)

1在IDE中通过设置断点、使用手表等进行调试

2使用事件日志在IDE中调试
我从中获得了一些很好的信息,并对其进行了调整,在过程调用/返回中添加了时间戳和缩进/缩进,以便更快地查看嵌套调用。有人知道更好的吗

3使用探查器

4还有其他的吗?
比如说疯狂等等


(我目前正在使用Delphi 7)

不确定为什么要升级以调试问题。是的,较新的IDE提供了更多的功能来帮助您调试某些东西,但是考虑到您之前提出的问题,我宁愿推荐一个好的日志解决方案,比如or。它们提供了比任何基于事件日志的自主解决方案更大的灵活性和功能,并且不需要像IDE那样单步执行代码(这会影响多线程问题中的计时)

更新

对不起,我没听清楚自由和开源软件的意思。CodeSite和SmartInspect都不是。对于免费解决方案,您可以查看工具系列中的日志功能。

您可以尝试my(开源)采样探查器的“Process Stack Viewer”:
(您需要一些调试信息:一个.map或.jdbg文件)

您可以观察所有线程的堆栈(也是原始堆栈,带有“误报”,但在不可能进行正常堆栈遍历时非常有用),并执行一些简单的采样分析


注意:我的(较旧的)检测分析器可以进行精确的分析,在同一个站点上。

Delphi 7的IDE一开始就很好,只有在遇到无法用现有工具修复的问题时才可以查看第三方工具:

  • 它的错误消息是信息性的,不会过于冗长
  • 调试器非常好,您有很多选项用于检查变量、制动点、条件制动点、数据制动点、地址制动点、模块加载制动点。它的调用堆栈视图很好,它支持多线程调试
  • 良好的分步执行、逐步进入、逐步结束、运行直至返回等
当您需要诊断客户端计算机上的问题时(客户端计算机上没有Delphi IDE),第三方工具会提供帮助。如果你能让问题在你的计算机上表现出来,你就不用单独使用IDE,不需要任何额外的东西,免费的或付费的

  • 探查器:这不是一个调试工具。当您需要查找应用程序中的瓶颈,或者需要进行一些速度优化时,可以使用探查器
  • 记录第三方框架:好的框架并不便宜,您可以在没有工具的情况下进行最少的记录(有时甚至ShowMessage也可以工作)
  • MadExcept,记录异常的其他工具:它们通常要求调试信息出现在EXE中,这不是一个好主意,因为这会使程序速度变慢,更容易破解。同样,如果您可以在计算机上获得异常,则不需要记录器

我并不是说第三方调试辅助工具没有用处:它们确实有用,但我会等到我能清楚地看到任何工具的好处后再使用它。在我看来,自由软件是不存在的:即使是你不付费的软件也需要时间来学习如何使用它,并且需要对你的程序和工作流程进行更改。

对于更大的工作,也需要时间

对于所选代码,一个更便宜的解决方案是通过免费的Pascal(带有“随机化局部变量选项”)运行它,然后通过valgrind运行它。我已经用这种方式验证了我的大多数流式代码(它有很多向后的compat结构)

另一个这样有趣的开关是-CR,verifyobject方法调用。它基本上每小时都会旋转

TXXX(something).callsomething 
进入

特别是在具有复杂树的代码中,这可以提供一些宝贵的信息

正常的Pascal语言检查(范围、I/O、溢出、堆栈aka-Criot)也很有用,在Delphi中也可以使用


一些可以静态检测的范围检查错误(通常是循环边界系列)将导致(beta版)FPC 3.0.x+中的编译错误。

即使在Delphi 7中,Delphi集成调试器的功能也足以处理大多数调试任务。它还可以远程调试应用程序。无论如何,在某些情况下,您可能需要跟踪不同类型的问题:

  • 要检查内存泄漏,可以切换到内存管理器,如具有良好内存泄漏报告的内存管理器。像AQTime这样的分析器也有内存分配分析器来识别此类问题
  • 要调查性能问题,您需要一个性能分析器。有采样剖面仪(侵入性较小,但精度可能较低)和标准剖面仪(AQTime,不便宜但很好,还有其他)
  • 要跟踪异常,尤其是在已部署的应用程序上,您可能需要JCL/JVCL(免费)、MadExcept或EurekaLog或SmartInspect等工具
  • 要获取应用程序执行操作的日志,可以使用OutputDebugString()和IDE事件查看器或独立应用程序。还有专用工具,如SmartInspect
  • 您还可以将Delphi 7.map文件映射到.dbg文件,并使用外部调试器作为WinSDK WinDbg,并在以下工具中查看应用程序调用:

  • 一些调试工具还可能提供诸如代码覆盖率检查(哪些代码实际执行过,哪些从未执行过)、平台合规性(检查给定平台支持的API调用)、资源使用等功能,但对于更大的开发可能有用。

    Rad Studio XE包括一个轻版本的CodeSite和AQTime,这两者加在一起都是引人注目的改进

    使用JCL调试、MadExcept和其他评测,您可以做很多事情
    if something is txx then 
       TXXX(something).callsomething 
    else
       raise some exception;