是否有完整的Delphi调试资源,指导如何使用所有IDE调试工具?曾经有过MarcoCantù的指南,但如果我没有错,它会更新到Delphi 5.
请你重定向到一个完整的资源,至少更新到D2009(如果XE更好)。
答案 0 :(得分:5)
IMO关于调试的官方文档是全面的:Debugging Applications 和Debugging Applications。 AFAICS这两个网站的内容相似,但后者可能更新。
我还想在远程调试中注意Warren Postma的tutorial,它帮助我立刻开始。
答案 1 :(得分:5)
调试资源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;
ExpressionA是你永远不会想到的东西 (即如果它是真的,它表示异常情况), 或者表达式是你总是希望成为现实的东西 (如果它是假的,则表示异常情况)。
请记住,任何一个表达式都可以包含多个函数调用 - 如果需要的话。
你可以将它们放在{$ 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;
您也可以使用
ASSERT(表达,“消息”); ASSERT(不是表达,“消息”);
确保代码中的内容按预期运行。
如果在IDE中启用了ASSERT并且ASSERT失败 - ASSERT将创建一个异常,它会将堆栈展开到其类型的最后一个异常处理程序...
使用我的int3方法 - 你可以立即进入CPU调试器 - 如果你点击F8(跳过),你将进入下一行代码 - 你可以检查变量,看看整个调用堆栈,甚至继续踩到你的代码......
答案 2 :(得分:3)
互联网是你的朋友,这里有两个关于调试的链接
Delphi - 调试技术
[PDF] http://www.scip.be/ScipViewFile.php?Page=ArticlesDelphi11
那里的内容仍然非常相关
答案 3 :(得分:3)
还要花一些时间在一个异常处理框架中,例如:
那里有所有好东西,如堆栈痕迹,行号等。
答案 4 :(得分:0)
我想补充 Peter Sherman 的出色回复:
我最喜欢的调试技术是
if <MyExpression> then
asm nop end;
这段代码基本什么都不做,对运行性能没有影响。这是一个无操作。但是,您可以在该“asm”行上放置常规断点,它会像任何其他断点一样工作。 任何尝试过条件断点(尤其是那些内部循环)的人都知道,调试器评估断点条件可能需要很长时间,并且运行多个调试会话将成为一场噩梦。 在上述情况下,它全速运行,没有其他副作用。
附注:asm 块只能与 x86 编译器一起使用。