Delphi中Debug的终极指南

LaB*_*cca 9 delphi debugging

是否有完整的Delphi调试资源,指导如何使用所有IDE调试工具?曾经有过MarcoCantù的指南,但如果我没有错,它会更新到Delphi 5.

请你重定向到一个完整的资源,至少更新到D2009(如果XE更好).

Pet*_*man 7

调试资源PDF没有提到我最喜欢的调试技术:

假设您想要在满足运行时条件的某个复杂且仅可用的情况下中断.

你可以说

if <MyExpressionA> then
asm
  int 3; // Enter CPU Debugger
end;

Or you could say

if not <MyExpressionB> then
asm
  int 3; // Enter CPU Debugger
end;
Run Code Online (Sandbox Code Playgroud)

其中ExpressionA是你永远不会想到的东西(即,如果它是真的,它表示异常条件),或者其中ExpressionB是你总是期望是真的(即,如果它是假的,它表示异常条件).

请记住,任何一个表达式都可以包含多个函数调用 - 如果需要它们.

您可以将它们放在{$ IFDEF DEBUG}内的块内,如下所示:

procedure MyProcedure;
var X: Integer;
begin
  X := GetTheAnswerToLifeTheUniverseAndEverything();

  {$IFDEF DEBUG}
  if X <> 42 then // Highly contrived example
  asm
    int 3; // Enter CPU Debugger -- Press F8 when here to step back into source...
  end;
  {$ENDIF}

  // More code here...

end;
Run Code Online (Sandbox Code Playgroud)

你也可以使用

ASSERT(表达,"消息"); ASSERT(不是表达,"消息");

确保代码中的内容按预期运行.

如果在IDE中启用ASSERT并且ASSERT失败 - ASSERT将创建一个异常,该异常将堆栈展开到其类型的最后一个异常处理程序......

使用我的int3方法 - 你可以立即进入CPU调试器 - 如果你点击F8(跳过),你将进入下一行代码 - 你可以检查变量,查看整个调用堆栈,以及甚至继续踩着你的代码......


Sig*_*dur 5

互联网是你的朋友,这里有两个关于调试的链接

Delphi - 调试技术

[PDF] http://www.scip.be/ScipViewFile.php?Page=ArticlesDelphi11

里面的内容还是很相关的


Ser*_*yuz 5

IMO关于调试的官方文档是全面的:调试应用程序调试应用程序.AFAICS这两个网站的内容相似,但后者可能更新.

我还要注意Warren Postma的远程调试教程,它帮助我立刻开始.