本帖最后由 Event 于 2023-5-18 00:38 编辑
看起来是在一个循环中等待文件路径(FilePath.Text中的)存在。如果该路径不存在,它会进入循环,枚举Windows标题
附上GPT4的分析:
[Asm] 纯文本查看 复制代码 一种可能的卡死原因是这个while循环,当文件路径不存在时,程序会陷入一个无限循环。假如文件路径一直不存在,或者在这段时间内没有被其他程序或用户创建,那么代码将一直执行这个循环,导致看上去像是“卡死”。
如果这个文件路径的存在性是你的代码运行的关键,那么你可能需要做一些调整:
提供一个超时机制,如果文件路径在一定时间内仍不存在,就跳出循环。
提供一个用户反馈机制,告知用户文件路径不存在,并让他们有机会更正或创建这个路径。
检查你的代码是否有可能在其他地方创建或更正这个文件路径。如果有,确保这部分代码能在适当的时间内运行。
另外,注意到你在代码中使用了正则表达式来进行模式匹配,如果正则表达式的复杂性或输入字符串的长度过大,也可能造成性能问题,但是在这个例子中,这个问题似乎相对较小。
if (FilePath.Text <> '') and (Check_Module.Checked = True) then
begin
var LoopCount: Integer := 0;
const MaxLoopCount: Integer := 1000; // 可以根据需要调整这个值
while (not DirectoryExists(FilePath.Text)) and (LoopCount < MaxLoopCount) do
begin
Inc(LoopCount);
Titles := TStringList.Create;
try
EnumWindowsTitles(Titles);
for I := 0 to Titles.Count - 1 do
begin
match := TRegEx.match(Titles[I], '(?<=模块:\s).*(?=-\ 线程)');
if match.Success then
begin
if Pos(match.Value, Exclusion_list.Text) > 0 then
begin
DbgCmdExec('StepOver');
end
else
begin
DbgCmdExec('StepIn');
end;
end
else
begin
ShowMessage('正则表达式竟然匹配不成功哟~~');
end;
end;
finally
Titles.Free;
end;
end;
if LoopCount >= MaxLoopCount then
begin
ShowMessage('超时: 文件路径 "' + FilePath.Text + '" 不存在');
end;
end;
|