2017-03-28 5 views
1

호출을 차단하는 Delphi 10 멀티 스레딩 응용 프로그램이 있습니다. 종료 할 때 때때로 RAM에서 언로드되지 않고 Delphi 디버거가 중지되지 않습니다.내 프로그램은 어디에서 기다리고 있습니까?

어떤 루틴이 내 앱을 기다리고 있는지 감지하는 방법 (도구, 메소드)은 무엇입니까?

답변

7
  1. Threads window (보기, 디버그 윈도우, 스레드 또는 Ctrl+Alt+V)
  2. 차례로 각 스레드를 두 번 클릭하고 call stack (보기 검사를 보여 Pause 버튼 (실행 프로그램의 일시 정지) 히트 디버그 윈도우, 호출 스택 또는 Ctrl+Alt+S) 호출 스택에 루틴에 대한
  3. 봐와 호출 스택의 상단에있는 코드를 정독 할 때 당신은 전에 볼 수있는 증거를 평가하지만, 소스 파일에서

경우에 따라 Debug DCUs (프로젝트, 옵션 ..., 델파이 컴파일러, 컴파일, 디버그 .dcus 사용) 및 runtime packages (프로젝트, 옵션 ..., 패키지, 런타임 패키지)을 사용하여 위의 단계를 실행하는 것이 더 유익합니다. , 런타임 패키지와의 링크)

+0

고맙습니다. 이걸 몰랐네. 이 창에는 5 개의 스레드가 표시됩니다. State = Stopped, Status = Unknown 및 State = Stopped, Status = Stepped를 가진 스레드가 4 개 있습니다. – Paul

+1

메인 스레드를 찾아서 차단 대상을 확인하십시오. 거기서 가져가. 어떤 스레드가 주 스레드인지 쉽게 알 수 있도록 스레드의 이름을 지정할 수 있습니다. –

+3

[이름 지정 스레드] (http://docwiki.embarcadero.com/RADStudio/en/Naming_a_Thread) 설명서 – blong