수명이 짧은 프로그램을 디버깅하고 있습니다. 즉, lldb/gdb 디버거가 연결될 때까지 기다리지 않습니다. 그러면 lldb 디버거를 이런 종류의 프로세스에 어떻게 첨부 할 수 있습니까?lldb/gdb를 수명이 짧은 프로세스에 연결 하시겠습니까?
0
A
답변
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을 참조하십시오.
디버거를 시작하여 프로세스를 시작 하시겠습니까? 처음에 수면을 추가하도록 코드를 변경 하시겠습니까? –
그 프로그램을 독립적으로 테스트하고'gdb' –
http://tromey.com/blog/?p=734에서 시작하십시오. – ks1322