Delphi:如何从另一个线程获得堆栈跟踪?

时间:2017-12-13 14:32:12

标签: multithreading delphi debugging

我使用RtlCaptureStackBackTrace来调试我的应用程序的主线程中提出的异常,当它在客户端的PC上运行时。它只提供地址,但它足以定位大多数问题,除非主线程被冻结。

对于这种错误,我做了一个像这样的看门狗线程

procedure TWatchDog.Execute;
var
  res:  NativeInt;
begin
  repeat
    If not Terminated then sleep(1000);
    res:=SendMessageTimeout(MainFormHandle,WM_NULL,0,0,SMTO_NOTIMEOUTIFNOTHUNG,10000,nil);
    If (res=0) and (HangsReported<4) then begin
      WasHanged:=true;
      APIs.SendMessage('WatchDog *HANG DETECTED* (v.'+Version_Num+') codes: '+ GenCRushRep);
      inc(HangsReported);
    end;
  until Terminated;
end;

函数GenCRushRep返回RtlCaptureStackBackTrace给出的最后16个堆栈帧,但它不包含导致主线程挂起的情况。

有没有办法从监视程序线程中的主线程中收集一些更有用的信息?

0 个答案:

没有答案