调试资源PDF没有提到我最喜欢的调试技术:
假设您想要在满足某个特定的、复杂的、仅在运行时可用的条件时中断。
你可以说
代码语言:javascript复制if
asm
int 3; // Enter CPU Debugger
end;
Or you could say
if not
asm
int 3; // Enter CPU Debugger
end;其中ExpressionA是你从未想过是真的东西(即,如果它是真的,它表示异常情况),或者ExpressionB是你总是期望为真的东西(即,如果它是假的,它表示异常情况)。
请记住,这两个表达式都可以包含多个函数调用--如果需要的话。
您可以将它们放在块中,{$IFDEF调试}中,如下所示:
代码语言:javascript复制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(Expression,"Message");ASSERT(not Expression,"Message");
以确保代码中的内容按预期运行。
如果在IDE中启用了断言,并且断言失败--断言将创建一个异常,该异常将展开堆栈到其类型的最后一个异常处理程序...
使用我的int3方法--您立即进入CPU调试器--如果您点击F8 (跳过),您将跳到下一行代码--您可以检查变量,查看整个调用堆栈,甚至继续单步执行您的代码...