采取以下片段:
case x of
1: begin
Assert(ChildCount = 2);
ChildNode[0].ToString(Builder);
Builder.Append(F);
ChildNode[1].ToString(Builder);
end; {1:}
如果断言触发我丢失了所有上下文,local variables
检查员将在任何地方显示inaccessible value
。
我可以通过添加额外的if-then
并手动放置断点来解决这个问题:
case x of
1: begin
if not(ChildCount = 2) then
Assert(ChildCount = 2); <-- add breakpoint here.
ChildNode[0].ToString(Builder);
Builder.Append(F);
ChildNode[1].ToString(Builder);
end; {1:}
然而,这会增加我的代码,我需要手动插入断点。
有没有办法打破断言,这样我就不会丢失执行上下文,而且我仍然可以检查变量?
答案 0 :(得分:3)
你可以在调试器中添加像使用子句一样的东西到句子中停止(比如你在每个断言时都设置了断点)但是之后继续执行。然后,您可以检查导致断言的所有条件。
unit HookAssert;
interface
{$If Defined(DEBUG) }
uses
Winapi.Windows;
procedure Assert(Condition: Boolean; const Message: String = '');
{$EndIf}
implementation
{$If Defined(DEBUG) }
procedure Assert(Condition: Boolean; const Message: String = '');
begin
if not Condition then
DebugBreak;
end;
{$EndIf}
end.
答案 1 :(得分:0)
在Delphi 10 Seattle下,我无法重现您的问题(无论如何都没有基本用例)。我可以:
然后我可以检查我的例行程序的变量。