2013-06-07 3 views
5

내 소프트웨어에서 SIGUSR2 신호를 사용하고 LLDB (Xcode 4.6.2 이상)를 디버거로 사용하고 있습니다. 나는 SIGUSR2에서을 stoping 명령을 사용하여 그렇게 한에서 LLDB을 해제하고 싶습니다 : 나는 LLDB 항상 시작할 때이 명령을 실행해야 할 수있는 방법을 찾고 있어요LLDB 초기화시 신호 비활성화

process handle --pass true --stop false --notify true SIGUSR2 

. 나는 내 .lldbinit에 settings append target.process.extra-startup-command process 행을 따라 무언가를 추가하려고했지만 target.process.extra-startup-command 설정의 값을 변경하는 동안 (settings show 명령에 의해 입증 됨),/내가 어떻게 이 설정을 사용하여 항상 process handle 명령을 실행하여 SIGUSR2 신호를 비활성화 할 수 있습니다.

나는 여기에 게시 된 "해결책"을 알고 있습니다 : Permanently configuring LLDB (in Xcode 4.3.2) not to stop on signals. 나는 그러나 더 우아한 해결책을 찾고있다.

답변

4

현재 중단 점 명령에서 main에 대한 제안은 가장 우아한 해결책입니다.

gdb는 모든 시스템이 어떤 시스템에 있더라도 모든 프로세스가 유닉스 신호에 마술처럼 반응하는 세계의 견해를 가지고 있습니다. 그래서 프로세스가 생기기 전에 프로세스가 SIGINT를 얻었을 때 어떤 일이 벌어 질 것인지를 말하는 것이 합리적입니다. lldb에서 프로세스가 생성되면 프로세스의 신호와 기본 동작을 알려줍니다. 지금은 처리하기 전에 신호 동작에 대한 구성 옵션을 저장할 자연스러운 장소가 없다는 것을 제외하고는 멋집니다. 이것은 단지 추가 되어야만하는 것입니다.

"프로세스 실행"뿐 아니라 "프로세스 종료"및 "공유 라이브러리로드"등 "프로세스 수명주기 이벤트"를 트리거 할 수있는 기능이 추가되었습니다. 이 기능은 개선 요청 (http://bugreport.apple.com/)을 제출하는 것이 좋을 것입니다. 버그와 같은 버그가 기능에 대한 투표로 작용하기 때문입니다.

BTW, target.process.extra-startup-command은 완전히 다른 작업을 수행합니다. lldb가 실행을 시작하기 전에 디버그 에이전트 (예 : debugserver)로 보내는 시퀀스에 몇 가지 명령을 추가 할 수 있습니다. 주요 용도는 더 많은 디버그 서버 로깅을 켜는 것입니다.