TestStand에서 멀티 스레드가 실행중일 때 디버깅 툴 사용에 관한 문제



주요한 소프트웨어:
주요한 소프트웨어 버전: 3.5
문제가 해결된 소프트웨어 버전:
부차적인 소프트웨어: N/A

문제점:

저는 몇몇 sequence들을 병렬적으로 실행하고 있습니다. 외부 코드 모듈(예를 들면, LabVIEW VI, DLL)이 다른 스레드에서 실행 중일 때 실행단계가 breakpoint를 만나게 되면, 디버깅 툴(Step Into, Step Out, Step Over, Resume)이 비활성화됩니다. 다른 스레드에 있는 모든 외부 코드 모듈들의 실행이 끝나면 디버깅 툴이 다시 활성화되어서 사용할 수 있습니다.

이 현상의 원인은 무엇이고, 멀티 스레드가 실행 중일 때, 디버깅 툴을 사용하려면 어떻게 해야 하나요?



솔루션:

실행이 break(혹은 pause)하려면, 모든 스레드가 스텝들 사이에 있어야합니다. 즉 스레드들 중의 하나가 어떤 모듈을 불러들이고 있는 상태에서는 실행이 멈추지 않습니다.

하지만, 방법은 있습니다. TestStand API 프로퍼티 중 Thread.ExternallySuspended 를 사용해서 TestStand 엔진으로 하여금 그 코드 모듈이 실행되고 있는 스레드가 이미 정지된 것처럼 여기도록 만들 수 있습니다. 스레드가 외부로부터 중지되면, TestStand에서 실행이 멈추게 하기위해서 더이상 스레드가 스텝들 사이에 있어야 할 필요가 없습니다.

Thread.ExternallySuspended 프로퍼티를 사용하는 방법은, 코드 모듈이 실행하기 전에 True로 놓고, 모듈이 끝나자마자 다시 False로 돌려놓으면 됩니다. Sequence Context(예를 들면,SequenceContext.Thread)로부터 스레드 Object에 대한 레퍼런스를 받을 수 있습니다.

Note: 실행이 breakpoint에 있는 중에 Thread.ExternallySuspended 프로퍼티가 False로 되어 있으면 코드 모듈은 TestStand 실행이 다시 진행될 때까지 프로퍼티 재설정을 저지합니다.

Thread.ExternallySuspended  프로퍼티는 동작 시간이 지정되어 있지 않은(즉 대화상자를 보여주기 위해 While Loop를 사용한 코드) 혹은 동작시간이 긴 코드 모듈에 적용하는 것이 좋습니다. Thread.ExternallySuspended 프로퍼티에 대한 더 자세한 내용은 TestStand API Help 섹션이나 아래 링크되어 있는 예제를 참조하시기 바랍니다.



관련 링크: KnowledgeBase 2VIB24O6: Execution Appears to Hang When an Error Occurs While Running Multiple Threads in TestStand

Developer Zone Example: Use of Thread.ExternallySuspended within Code Modules to Enable Debugging Multiple Threads

첨부:





리포트 날짜: 03/18/2003
마지막 업데이트: 07/25/2007
문서 번호: 2VHEEOO6