Delphi 10.2多线程调试$ C0000005 AV

Mic*_*lev 7 delphi multithreading

Delphi 10.2最新版本2004,赢得x64 VCL应用程序.

试图调试我的大型多线程应用程序我在奇怪的地方遇到了很多$ C00000005异常.试图缩小问题的范围使我得到了这个最小的例子:创建一些(在我的情况下10个就足以看到问题)线程,用"use debug .dcus"编译.

在第二个设置断点sleep并多次按F9,直到异常被引​​发.

当它的凸起,汇编代码看起来坏了(看截图).RIP指向正确指令中间的点.

当我为Win32编译相同的测试应用程序时,它只是在几个F9之后挂在调试器中,所以我甚至无法制作错误截图.

更新:

有关原始问题的更多信息使我开始寻找调试器问题:我的生活应用程序(VCL win x64)有时会停止处理错误"导致程序无法正常工作的问题".

每个线程都有异常日志记录系统,因此在失败之后日志是空的,我希望在调试器中运行它会给我一些有用的信息.

没有断点,生活应用程序有时(非常罕见,大约每5小时一次)抛出一个异常导致深入到system.pas(查看最后一个屏幕).在这个屏幕上,最后一个System._USstrClr有nil指针.

当我在System._USstrClr上设置断点并多次点击F9 时,我的图像完全相同,最终会出现nil指针.

我没有说这两个问题有相同的原因,只是想了解发生了什么.

从我看到的这只发生在调试器中.

使用Release版本编译的生活应用程序不会引发exeptions,它只是因为"导致程序无法正常工作的问题"而停止,因为我的用户报告(并且没有任何错误信息的空日志).

TMyThread = class (TThread)
  procedure Execute; override;
end;

var
  frmClientTest: TfrmClientTest;
  ThreadList: TList<TMyThread>;

procedure TfrmClientTest.FormCreate(Sender: TObject);
var
  k: integer;
begin
  ThreadList:=TList<TMyThread>.Create;
  for k:=0 to 10 do ThreadList.Add(TMyThread.Create);
end;

procedure TMyThread.Execute;
begin
  FreeOnTerminate:=false;
  repeat
    sleep(100);
    sleep(200);
  until Terminated;
end;
Run Code Online (Sandbox Code Playgroud)

样品

中央处理器: 中央处理器

=================

真正的app异常:

在此输入图像描述