2014-12-21 2 views
0

수명이 짧은 프로그램을 디버깅하고 있습니다. 즉, lldb/gdb 디버거가 연결될 때까지 기다리지 않습니다. 그러면 lldb 디버거를 이런 종류의 프로세스에 어떻게 첨부 할 수 있습니까?lldb/gdb를 수명이 짧은 프로세스에 연결 하시겠습니까?

+2

디버거를 시작하여 프로세스를 시작 하시겠습니까? 처음에 수면을 추가하도록 코드를 변경 하시겠습니까? –

+0

그 프로그램을 독립적으로 테스트하고'gdb' –

+0

http://tromey.com/blog/?p=734에서 시작하십시오. – ks1322

답변

0

전통적인 접근 방식은 잠 루프를 가지고있다, 또는 당신은 소스에 액세스 할 수있는 경우, 그 다음

int wait_for_debugger = 1 
while (wait_for_debugger) 
    ; 

당신이 프로세스에 연결할 같은 busyloop를 넣어 설정 0 wait_for_debugger (예 : p wait_for_debugger = 0를) 프로세스를 계속 진행하십시오.

lldb에는 프로세스에 첨부 할 수있는 --waitfor 옵션이 있습니다. 이것은 lldb가 프로세스 이름의 새로운 인스턴스를 찾는 프로세스 테이블을 반복적으로 폴링하고 그것에 첨부합니다. 프로세스가 약간 실행되지만 폴링 빈도가 높기 때문에 일반적으로 일찍 잡을 수 있습니다. 이것은 process launch --waitfor --name procname 명령이거나 줄여서 pr la -w -n processname입니다.

0

그러면 이러한 종류의 프로세스에 lldb 디버거를 어떻게 첨부 할 수 있습니까?

디버거를 상위 프로세스에 연결하고 set follow-fork-mode child. 문서에 따르면 "새 프로세스는 fork 후에 디버깅됩니다. 부모 프로세스는 방해받지 않고 실행됩니다". GDB 매뉴얼의 4.11 Debugging Forks을 참조하십시오.