调试时如何查看通用数组的名称?
How to see the Generic Array's name while debugging?
我开始使用大量泛型,但现在我发现调试越来越难,要知道实际上开始处理哪个数组。参见示例:
Type
TData = record
DataID:integer;
DataName:string;
end;
var DataArr1,DataArr2,DataArr3:TArray<TData>;
procedure WorkOnData(Data:TArray<TData>);
begin
if Data = DataArr1 then // <-- PARKING HERE ON DEBUG I CAN SEE ARRAY DATA, BUT NOT WHICH ARRAY IT IS
ProcessA(DataArr1)
else if Data = DataArr2 then
ProcessB(DataArr2)
else if Data = DataArr3 then
ProcessC(DataArr3);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender = Button1 then
WorkOnData(DataArr1)
else if Sender = Button2 then
WorkOnData(DataArr2)
else if Sender = Button3 then
WorkOnData(DataArr3);
end;
所以,我可以通过比较识别数组得到True/False:
Data = DataArr1
但是,在比较之前,这并没有告诉我它是哪个数组的信息。因此,我需要在每次比较后设置断点才能知道哪个是 True。
这些显然不起作用:
Data.Name
TArray<Data>.Name
是否有任何其他方法可以知道我可以在调试器 (Watch) 中看到哪个数组已传递?
Answer/Solution:
对于面临同样问题的任何人,问题:正如雷米在接受的答案中所说的那样,我想要实现的目标是不可能的。好的,现在快速的解决方法是将比较 (Data = DataArr1
) 放入 Watch 中,看看哪个解析为 True。不是最好的,但仍然可用,因为现在我们可以看到实际使用的是哪个数组。
代码编译后就没有变量名了。当您调试 WorkOnData()
时,它可以显示的唯一变量名称是 Data
,如果不评估您提供的表达式,调试器无法知道 Data
指向什么。所以不行,你问的基本不可能。
您可能需要做的是将您的数组包装在另一个具有 Name
字符串字段的 record
中,然后根据需要传递该记录。当您在调试器中检查它时,您会看到它的 Name
值。
我开始使用大量泛型,但现在我发现调试越来越难,要知道实际上开始处理哪个数组。参见示例:
Type
TData = record
DataID:integer;
DataName:string;
end;
var DataArr1,DataArr2,DataArr3:TArray<TData>;
procedure WorkOnData(Data:TArray<TData>);
begin
if Data = DataArr1 then // <-- PARKING HERE ON DEBUG I CAN SEE ARRAY DATA, BUT NOT WHICH ARRAY IT IS
ProcessA(DataArr1)
else if Data = DataArr2 then
ProcessB(DataArr2)
else if Data = DataArr3 then
ProcessC(DataArr3);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender = Button1 then
WorkOnData(DataArr1)
else if Sender = Button2 then
WorkOnData(DataArr2)
else if Sender = Button3 then
WorkOnData(DataArr3);
end;
所以,我可以通过比较识别数组得到True/False:
Data = DataArr1
但是,在比较之前,这并没有告诉我它是哪个数组的信息。因此,我需要在每次比较后设置断点才能知道哪个是 True。
这些显然不起作用:
Data.Name
TArray<Data>.Name
是否有任何其他方法可以知道我可以在调试器 (Watch) 中看到哪个数组已传递?
Answer/Solution:
对于面临同样问题的任何人,问题:正如雷米在接受的答案中所说的那样,我想要实现的目标是不可能的。好的,现在快速的解决方法是将比较 (Data = DataArr1
) 放入 Watch 中,看看哪个解析为 True。不是最好的,但仍然可用,因为现在我们可以看到实际使用的是哪个数组。
代码编译后就没有变量名了。当您调试 WorkOnData()
时,它可以显示的唯一变量名称是 Data
,如果不评估您提供的表达式,调试器无法知道 Data
指向什么。所以不行,你问的基本不可能。
您可能需要做的是将您的数组包装在另一个具有 Name
字符串字段的 record
中,然后根据需要传递该记录。当您在调试器中检查它时,您会看到它的 Name
值。