2009-02-05 4 views
4

델파이 IDE의 버그에 대한 다른 질문의 답을 이끌어 내면서 IDE의 멀티 스레드 디버깅 기능을 개선 할 수있는 방법이 있는지 없는지, 적어도 왜 가끔 그렇게 나쁠까요?델파이의 멀티 스레드 디버깅 개선

프로그램 내에서 스레드가 여러 개있을 경우 F7 또는 F8 키를 눌러 코드를 실행하면 매우 긴 시간이 멈추거나 전체 IDE가 잠길 수 있습니다. 이것은 당신이 떠나거나 방법이나 절차를 입력 할 때 특히 뚜렷합니다. 디버거는 항상 단일 스레드 응용 프로그램에 적합합니다.

추신. 내가 사용하는 버전은 2007입니다

답변

0

예, 멀티 스레드 응용 프로그램을 디버깅하는 것은 번거로운 작업입니다. 한 스레드에서 다른 스레드로 끊임없이 교환하고 있기 때문입니다. 내 경험 멀티 스레드 디버깅에서

3

델파이 2007

첫째로 Vista 및 XP에 비해 델파이 2009을 사용하여 훨씬 좋네요, IDE는 훨씬 더 안정적이다.

둘째, Delphi 2009 on vista에서 디버거는 교착 상태가 발생하는 위치를 표시 할 수 있습니다.

Delphi 2007을 사용해야하는 경우 가능한 한 단일 스레드 단위 테스트에서 코드를 디버깅 한 다음 주 프로그램에서 테스트 한 코드를 사용하는 것이 좋습니다. ;)

+0

두 번째 사항 : 버그가 디버깅 된 코드가 아니라 IDE에 있기 때문에 디버거가 응답하지 않으면 큰 도움이되지 않습니다. 델파이 2009가 정말 더 낫지 않습니까? 스레드를 디버깅 할 때마다 F7이 작동합니까? – mghie

+0

마지막 지점 : 스레드 간 상호 작용에 문제가있을 때 도움이되지 않습니다. 이것은 IDE가 견고해야한다는 것입니다. 그렇지 않으면 전문 도구가 아닙니다. 원격 디버깅에 대한 악몽에 대해 말하지 않기 위해서 ... – mghie

+0

델파이 2009에서 상당히 광범위한 디버깅 작업 풀을 썼고 잠금 장치가 없었습니다. 나는 멀티 스레드 코드를 지금 쓰고 있지만 이유는 그랬을 것이다. 나는 어떤 코드에서 D2009 시험판을 시험해보고 그것이 당신을 위해 잘 작동 하는지를 볼 것입니다! – PetriW

2

응용 프로그램 자체에 데드락이 발생하지 않은 경우 현재 스레드가 무엇인지 잘 알고 있어야합니다. 디버거에서 스레드 목록을 유지하고 명명 된 스레드를 사용해보십시오.

교착 상태가있는 응용 프로그램을 대화 형으로 디버깅하는 것이 불가능할 때가 있습니다. 이 경우 WinDbg 및 Adplus와 같은 도구를 사용하여 메모리 덤프를 사용할 수 있습니다. 예, 대화 형 디버거를 사용하는 것보다 훨씬 어려울 수 있지만 디버거가 전혀 없어도됩니다. Tess Ferrandez의 블로그에는 샘플 애플리케이션, 데모 및 지침이 있습니다. 나는 this page으로 시작하겠다. 실험실은 .NET 중심이지만 그만 두지 마십시오. 아이디어는 동일합니다.

1

멀티 스레드 작업을 디버깅하려면 대화 형 디버거 대신 로그 파일 (응용 프로그램이 실행 된 후 분석)을 사용하는 경우가 많습니다.

예를 들어, 'OutputDebugString'함수를 사용하십시오. 출력은 Delphi의 이벤트 로그에 있습니다. Delphi 외부에서 프로그램을 시작하면 DebugView from SysInternals을 사용하여 로그를 표시 할 수 있습니다. 스레드 ID를 각 출력에 추가하도록주의하십시오 (GetCurrentThreadID). 로그 쓰기 직전에 스레드 전환이있을 수 있습니다. 그러나 여러 스레드가 상호 작용하는 곳에서는 중요한 세션 (또는 다른 동기화 개체)이 있어야 문제가 발생합니다.

0

방금 ​​생각했기 때문에 한번도 시도한 적이없는 다른 아이디어 : 한 스레드를 디버깅하고 다른 스레드가 방해받지 않으려는 경우 임시로 일부 스레드를 일시 중단 할 수 있습니다.

Process Explorer from SysInternals은 스레드를 일시 중단했다가 다시 시작할 수 있습니다 (프로세스의 속성에서 "스레드"탭에 있음). 하지만 내가 말했듯이 나는 지금까지 그것을 테스트 해 본 적이 없다.