2017-02-06 1 views
-1

가끔 내 프로그램이 멈 춥니 다. '일시 중지 프로그램'을 클릭하면 다음과 같은 메시지가 표시됩니다.프로그램이 멈추지 만 CPU 사용률이 0입니다.

ntdll.RtlUserThreadStart: 
773301C4 89442404   mov [esp+$04],eax 
773301C8 895C2408   mov [esp+$08],ebx 
773301CC E9E9960200  jmp $773598ba 
773301D1 8DA42400000000 lea esp,[esp+$0000] 
773301D8 8DA42400000000 lea esp,[esp+$0000] 
773301DF 90    nop 

'통화 스택'창은 비 었음!

F8을 세 번 누르면, 프로그램은 내가 요구에 그것을 재현 할 수없는

ntdll.RtlInitializeExceptionChain: 
7735989F 8BFF    mov edi,edi 

로 이동하지만 난 하루에 한 번 문제를 참조하십시오 (아마도 더 적은?).
컴파일러/디버거가 32 비트에서 실행 중입니다.

이것이 디버거 문제일까요? 과거에 비슷한 문제가 발생했습니다 : 때로는 델파이 앱에서 외부 애플리케이션을 실행할 때 디버거가 정지합니다. 이것은 Delphi XE7의 문서화 된 버그입니다. 그래서, 아마도 이것은 비슷한/관련 버그일까요?


+1

여기에 어떻게 든 비슷한 문제가 있지만 제 경우에는 CPU가 0 %이고 스레드를 선택할 수 없습니다 : http://stackoverflow.com/questions/13057133/stopping-delphi-program-in-an-infinite-loop – Ampere

+1

말하기 어렵다. 매우 쉽게 귀하의 코드에 결함이 될 수 있습니다. 그것은 확실하게 가장 가능성있는 설명입니다. –

+1

그게 정확히 무슨 짓을했는지. 코드의 결함으로 인해 교착 상태와 같은 냄새가납니다. 일반적으로, 반대로 증거를 찾을 때까지 결함이 시스템이 아닌 코드에 있다고 가정해야합니다. –

답변

1

여기 진행 중입니다. 나는 내 프로그램에서 비슷한 문제를 발견했다.

MyListBox.Items.Text:= xxx; 


procedure TMyListBox.LBADDSTRING(var M: TMessage); { This makes the control slow when I work with 100000 lines } 
begin 
inherited; 
if Assigned(FOnChange) 
then FOnChange(Self, lbAdded); 
end; 

실행 포인트는 모든 라인 (100,000 회)에 대한 LBADDSTRING를 통해 실행 : 나는 때문에이 코드의 사용자 지정 목록 상자에서 (100000 이상) 큰 텍스트를로드 할 때 동결이 나타납니다. 그래서 얼어 붙은 것 같습니다.

이상한 점도 있습니다. 프로그램을 일시 중지하면 Delphi가 내 프로그램의 실행 지점을 정확하게 표시 할 수 없습니다 (5 개 스레드 모두 검사). 결국이 모든 것이 결국 델파이 디버거 결함입니다.

관련 문제