2009-06-08 4 views
1

Eclipse Workbench UI가 GNU 디버거와 통신하는 방법을 알고 싶습니다. C/C++ 용 Eclipse에서 메뉴를 단계적으로 누르거나 다시 시작하거나 계속 단추를 누르면 무슨 일이 벌어 질까요? GNU gdb가 어떻게 호출됩니까? gdb는 실행할 함수를 어떻게 알 수 있습니까? UI가 gdb와 어떻게 통신합니까? 사용자 정의 함수를 gdb에 추가했습니다 (함수가 무엇이든 상관 없습니다). 버튼을 눌러 gdb와 그 함수를 호출하도록 이클립스 워크 벤치에 버튼을 추가하고 싶습니다. Eclipse Workbench UI가 GNU gdb와 상호 작용하는 방식을 알고 싶습니다. 어떻게해야합니까?GNU 디버거 기능으로 Eclipse Workbench UI 인터페이스하기

감사합니다, Rohit

답변

5

는 "Accessing gdb with the Eclipse CDT and MI"기사를 참조하십시오.

GNU 디버거 (gdb)는 가장 널리 사용되는 오픈 소스 디버거입니다. 이것은 일반적으로 명령 행 실행 파일로 사용되지만 거의 알려지지 않은 MI 프로토콜을 사용하여 소프트웨어를 통해 액세스 할 수 있습니다.

  • CDT가 외부 디버거에 액세스 할 수 있도록 Eclipse/CDT 개발자가 C/C++ 디버거 인터페이스 (CDI)를 만들었습니다.
  • MI (Machine Interface)는 gdb 개발자가 생성하여 외부 응용 프로그램이 gdb에 액세스 할 수 있도록합니다.

많은 경우 MI 결과 레코드 다음에 (gdb) 및 대역 외 (OOB) 레코드가옵니다. 이러한 레코드는 대상 또는 디버깅 환경의 상태에 대한 추가 정보를 제공합니다.
-exec-step 후 * stopped 메시지는 중단 점, 감시 점 및 대상이 중지되었거나 완료된 이유에 대한 정보를 제공하는 OOB 레코드입니다.
이전 세션에서 gdb는 각 -exec-step 다음에 * stopped, reason = "end-stepping-range"를 대상의 상태와 함께 반환합니다.

gdb/MI는 사람이 이해하기 어렵지만 소프트웨어 프로세스 간 통신에 이상적입니다.
CDT는 데이터를 보내고받는 가상 터미널 (pty)을 만들어이 통신을 가능하게합니다. 그런 다음 gdb를 시작하고 디버그 데이터를 관리하는 두 개의 세션 객체를 만듭니다.

MI-CDI-wrapper-Eclipse 통신은 Eclipse의 그래픽 디스플레이를 적절한 디버그 데이터로 업데이트하는 경우에만 유용합니다.

alt text

당신이 신호보기에서 항목을 마우스 오른쪽 단추로 클릭

는 신호 컨텍스트 메뉴 옵션을 다시 시작하면 대상의 실행을 계속하고 프로세스에 선택 신호를 보낼 수 있습니다.
이 옵션은 SignalsActionDelegate을 호출합니다.
이 옵션을 선택하면 위임자는 CDI 대상을 호출하여 선택한 신호에 해당하는 ICDISignal을 사용하여 실행을 다시 시작합니다.
대상은 신호에 대한 MI 명령을 생성하고 명령을 gdb로 보내는 MISession.postCommand()를 호출합니다.

  1. MISession은 GDB에서 MI 출력을 분석하여 신호가 설정이 변경되는지 여부를 결정 GDB가 응답하면

    는 신호보기를 업데이트하는 프로세스는 다섯 단계 걸린다. 그 경우는, MISignalChangedEvent를 방아쇠합니다.

  2. CDI EventManager는 MISignalChangedEvent를 수신하고 CDI 이벤트 ChangedEvent를 작성하여 응답합니다. 그런 다음 이벤트를 발생시키고 모든 ICDIEventListener를 경고합니다.
  3. CDebugTarget은 EventManager에서 이벤트를 받고 ChangedEvent가 신호 변경과 관련되어 있는지 여부를 확인합니다. 그렇다면 CSignalManager를 호출하여 CDI 이벤트를 처리합니다.
  4. CSignalManager는 해당 모델 요소를 업데이트하고 해당 유형이 DebugEvent.CHANGE로 지정된 DebugEvent를 발생시킵니다.
  5. SignalViewEventHandler는 DebugEvent를 수신하여 신호를 처리하는지 확인하고 Signals View를 새로 고칩니다.

신호보기의 관련 작업을 이해하는 것은 두 가지 이유로 중요합니다.

그것은 다른 모델 요소가 함께 작동하는 방법의 구체적인 예로서 역할을
  • 은 당신이 이클립스, GDB와 CDI와 상호 작용 유사한 뷰를 구축 할 수있는 방법을 보여줍니다.

결론

  • 두 세션 객체 (MISessionSession),
  • 두 가지 목표 (CDebugTargetTarget), 그리고 모델 요소의
  • 완전히 다른 두 계층
+0

고맙습니다. VonC. 이것은 분명히 나를 도울 것입니다. 고마워요. –

+0

@Rohit : 천만에. – VonC

관련 문제