메인 폼이 응답하는지 확인하는 "워치 독"스레드를 사용하고 미니 덤프를 만드십시오 (WinDbg로이 덤프를로드하고 map2dbg.exe를 사용하여 Delphi .map을 .dbg로 변환 할 수 있음) .
FMainformHandle := Application.MainForm.Handle;
Result := SendMessageTimeOut(FMainformHandle, WM_NULL, 0, 0,
SMTO_NORMAL or SMTO_ABORTIFHUNG,
C_TIME_OUT_SECONDS * 1000, //wait 1minute
iRes) <> 0;
if not Result then
begin
hFile := CreateFile(PChar(Result), GENERIC_WRITE, FILE_SHARE_WRITE, nil,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
try
MiniDumpWriteDump(GetCurrentProcess, GetCurrentProcessId, hFile,
aDumpType, nil, nil ,nil);
finally
FileClose(hfile);
end;
end;
그러나 당신은 또한
jclDebug.pas 사용할 수 있습니다
JclCreateThreadStackTraceFromID (MainthreadId)이 대한
(WinDbg는 등 만 JCL + 델파이에 대한 필요성을. 지도)
세 번째 옵션은 내 새 sampling profiler을 사용하는 것입니다.이 프로세스에는 "process s tack 뷰어 "이므로 실행중인 프로세스의 모든 스레드 스택을 볼 수 있습니다. 이전에는 SysInternals Process Explorer를 사용했지만 .dbg 파일이 필요합니다. 스택 추적을 위해 .map, TD32, JDBG 등 (모든 Delphi 디버그 정보)을 사용합니다.
앱을 중단 할 때 스택을 조사 할 때 사용할 수 있습니다. (MiniDumpWriteDump에 대한)
윈도우 API :
http://sourceforge.net/projects/jedi-apilib/files/JEDI%20Windows%20API/
WinDbg는 :
http://www.microsoft.com/whdc/devtools/debugging/installx86.Mspx
Map2Dbg :
http://code.google.com/p/map2dbg/
JEDI JCL :
http://jcl.delphi-jedi.org/
AsmProfiler, samling 모드 : (아직 개발중인!)
http://asmprofiler.googlecode.com/files/AsmSamplingProfiler0.4.zip
코드에 대해 더 알지 못해도 말하기는 어렵습니다. CPU 및 메모리 사용이 중단 된 경우 (작업 관리자에서) 무엇입니까? 그것은 정적인가요? – fupsduck
메모리 사용이 안정적이고 CPU 사용량이 0입니다. (실제로 상황을 조사 할 기회가 많지 않습니다.) – Harriv