Delphi 10.2多线程调试$ C0000005 AV'

时间:2018-03-11 18:13:29

标签: multithreading delphi

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

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

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

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

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

更新

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

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

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

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

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

从我看到的情况发生在仅在调试器中发生。

使用Release版本编译的life应用程序不会引发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;

sample

CPU: CPU

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

真正的应用例外:

enter image description here

0 个答案:

没有答案