2010-02-24 3 views
3

나는 symbolicatecrash를 사용하고 흥미로운 결과를 얻으려고합니다. 동료가 우리의 배포판을 다른 컴퓨터에 구축했기 때문에 dSYM 파일을 보냈습니다.symbolicatecrash가 내 dSYM 파일을 좋아하지 않습니다.

/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

는 모든 애플 기능에 채우고 있지만를 발견 symbolicatecrash 파일을 실행 한 후 광산. 문제는 dSYM 파일에 내 동료의 컴퓨터 정보가 있기 때문에 잠재적으로 dSYM 파일을 찾을 수 없다는 것입니다. 나는 충돌 보고서에서 진수 주소를 복사 할 때 나는이 같은 dwarfdump 사용할 수 있습니다

dwarfdump --lookup 0x0001f892 --arch의 ARMv6 경로/그것은 나에게의 행 번호를 제공/MyApp.app.dSYM

에 그 단일 호출을 올바르게. 또한, symbolicatecrash는 코드에서 게임의 라인 번호를 처리 할 수 ​​있지만 Apple의 코드에서는 사용할 수 없습니다. 나는 왜 그가 애플의 물건을 볼 수 없는지 모르겠다.하지만이 모든 것은 내가 이전에 언급 한 것처럼 문제가 dSYM을 찾는 것이라고 믿게한다.

So. dSYM의 경로를 symbolicatecrash 명령에 전달하는 방법이나 다른 방법으로 작동하게 할 수 있습니까? 왜냐하면, 심각하게 말하자면, 당신의 파일에 대한 일종의 마술적인 "검색"을하는 도구를 만드는 것은 완전히 바보 같기 때문에, 원하지 않기 때문에 그것을 찾지 못하기 때문입니다.

동료의 빌드가 Apple의 기능을 보여주지 않는 이유는 무엇입니까? 그리고 내가 여기있는 동안 크래시 파일의 "+"의미는 무엇입니까? 이처럼 :

0x00059f8c - [UIWindow sendEvent :] + 108

답변

6

symbolicatecrash 당신이 할 수있는 최선은 당신에게 기대대로 정확하게 일을 배울 것입니다, 하나의 거대한 해킹입니다. 또는 내부에있는 내용을 읽고 고쳐야하지만 다음 SDK 업데이트를 위해 다시 고쳐야 할 것입니다 ...

이 경우에는 dSYM 파일을 다음과 같은 폴더에 저장하지 않았다고 생각합니다. 앱 번들. 왼쪽 XCode와 정확히 같아야하며 스포트라이트가있는 위치에 있어야합니다. 또한 이름이 정확히 예상대로인지 확인하십시오. "dSYM"의 정확한 대소 문자가 중요하며 버그로 인해 앱 이름에 점이 지원되지 않는다고 들었습니다.

의심스러운 경우 항상 자세한 오류 메시지를 받으려면 -v 옵션을 사용하십시오.

Apple 바이너리에 대한 줄 번호 정보가 없습니다. 필자는 개인적으로 최소한 함수 이름을 얻는 것이 매우 행복합니다. 더 나쁠 수도 있었어.

"- [UIWindow sendEvent :] + 108"에서 함수의 시작부터 108 바이트를 의미합니다. 이 데이터의 유일한 유익한 해석은 숫자가 작 으면 숫자가 크면 상징이 엉망이되어 버리는 것이 정확하다는 것입니다.

+0

좋은 답변입니다. 필자는 애플이 의도적으로 정보의 종류 (파일 이름과 줄 번호)를 바이너리에 포함시키지 않았다는 것을 지적하고자한다. 이유는 소스 코드에 대한 추가 정보를 제공하고 싶지 않기 때문이다. 우리 (개발자)가 그 정보를 사용할 수 있다고하더라도, 우리는 그 정보로 무엇을 할 것인가? Apple의 코드를 디버깅 할 수있는 것과는 달리 파일 이름과 행 번호를 아는 것은 쓸모가 없습니다. – Roberto

관련 문제