2013-07-26 3 views
8

때때로 iOS 앱에서 실제로 드문 버그를 추적하려고합니다. 내가 디버깅 할 때 xcode 또는 lldb 충돌을 일으키기 위해 repro을 시도한 후 (일반적으로 C++ 코드를 통해 실행 중일 때) 디버거에서 충돌 할 것이다. 이것은 화나게하는 것 이상입니다.iOS에 연결된 lldb에 직접 코어 덤프 (또는 이와 동등한 것)를 생성하는 방법

gdb를 사용하면 generate-core-dump을 사용하여 파일의 코어 덤프를 만들 수 있으므로 gdb에서 다시로드하고 적어도 모든 메모리를 볼 수 있습니다. 내가 원하는 것은 lldb에서 비슷한 것을 할 수있는 능력이다. 그래서 xcode가 충돌 할 때 (항상 최악의 경우에 일어나는 경향이 있기 때문에) 충돌을 재현 할 필요없이 디버깅 세션을 복구 할 수있다.

응용 프로그램이 jailbroken이 아닌 iPhone에서 실행 중이므로, 거기에서 메모리를 덤프하는 것과 같은 일을하기 위해 OS에 많은 액세스 권한이 없습니다.

하나의 가능한 대답은 lldb 대신 gdb를 사용하는 것입니다. 그러나 나는 그 순간에 기억하지 못하는 몇 가지 다른 문제를 일으키고, lldb에서 유용한 몇 가지 기능을 가지고 있지 않다고 생각합니다.

+0

'이미지 덤프 섹션 '을 찾고 계십니까? [이 페이지] (http://lldb.llvm.org/lldb-gdb.html)를 참조하십시오. – borrrden

답변

12

UPDATE : 엑스 코드 (6)는, 2014 년의 가을을 발표 lldb의 새로운 process save-core 명령을 포함 - lldb 이제 사용자 프로세스의 코어 덤프를 생성 할 수 있습니다. 예 : (lldb) process save-core /tmp/corefile 그리고 조금 기다려.

엑스 코드 5 및 이전 lldb 년대의 원래 대답

이었다 :

이 기능은 아직 lldb에서 구현되지 않습니다. 이 기능은 애플 버전의 gdb에서 구현되지 않았다.

일반적으로 요청되는 기능은 아니지만 다른 사람들이 유용하다고 말한 것입니다. 희망을 갖고 누군가 lldb에 그 기능을 추가 할 동기가 충분히 있기를 바랍니다. iOS 기기에서 얼마나 효과가 있을지 확신 할 수는 없습니다. 대용량 데이터 전송에는 그다지 효율적이지 않은 프로토콜을 통해 Mac으로 전송되는 거대한 양의 데이터가 포함될 것이기 때문입니다. .

핵심 파일

이 lldb -c를 ​​열 수있는/tmp를/corefile (핵심 파일)

+0

이것은 여전히 ​​사실입니까? –

+1

예, 현재 lldb와 함께 사용자 프로세스 코어 덤프를 생성 할 수있는 방법은 아직 없습니다 (2014 년 2 월). 지금 당장이 기능을 구현하는 작업을하는 사람은 누구인지 알지 못합니다. –

+1

Xcode 6이 Mac OS X에서 사용자 프로세스의 핵심 파일을 저장할 수 있다는 답변을 업데이트했습니다. –

0

그것은 iOS 용 프로세스 탐색기 도구를 사용하면 루트가 가정 어떤 PID (의 코어 덤프를 생성 할 수 있음을 주목할 필요하거나 같은 UID입니다 당신), 프로세스에 영향을 미치지 않고.