컴파일러가 표시 한 iPhone 프로그램 충돌 및 스택 보고서는 완전히 쓸모가 없습니다!

StackOverflow https://stackoverflow.com/questions/1444639

문제

iPhone 프로그램이 충돌 할 때 대부분의 시대에는 컴파일러가 스택으로 가득 찬 스택을 보여 주지만, 이들은 나에게 의미가 없습니다. 문제가 어디에 있는지 지적하지는 않으며 대부분이 쓸모없는 사람이 있습니다. 개발/테스트 중에 프로그램이 충돌 할 때이 충돌의 원인이 어떤 위치에 표시되는지 확인할 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

내 iPhone Dev Life는 내가 찾을 때까지 끔찍했습니다 nszombieenabled. 이 플래그를 실행 파일에 추가하면 결함이있는 객체의 이름이 무엇인지 알려 주면 메모리 문제를 볼 수 있습니다.

이것은 실제로 객체를 풀어주지 않지만 객체를 "좀비"로 마무리하고 그 안에 깃발을 설정하여 일반적으로 출시되었을 것입니다. 이런 식으로 다시 액세스하려고하면 오류를 만들기 전에 그것이 무엇인지 여전히 알고 있으며이 작은 정보를 사용하면 일반적으로 문제가 무엇인지 확인할 수 있습니다.

디버거가 때때로 유용한 정보를 얻을 때 특히 백그라운드 스레드에 도움이됩니다.

주목하는 것이 매우 중요합니다 그러나 100% 배포 코드가 아닌 디버그 코드에만 있는지 확인해야합니다. 아무것도 출시되지 않기 때문에 앱이 누출되고 누출되고 누출됩니다. 이 작업을 상기시키기 위해이 로그인을 AppDelegate에 넣었습니다.

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
  NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");

다른 팁

당신이 찾고있는 핵심 단어는 "기호"입니다. 장치에서 충돌 로그가있는 경우 스택 추적에 줄 번호를 제공하기 위해서는 태양을 상징해야합니다.

명령을 실행하는 데 도움이되는 .profile에있는 기능은 다음과 같습니다.

function desym
{
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}

기본적으로 앱 번들, 빌드에서 생성 된 DSYM 파일 및 충돌 로그를 동일한 디렉토리에 넣은 다음 "DYSM [CRASHLOG 파일 이름]을 실행하여 스택 추적에 기호가 올바르게 표시됩니다.

그것을 주목하십시오 ~ 해야 하다 충돌을 일으킨 동일한 실행 파일 및 DYSM 파일이어야합니다! 다시 컴파일 할 때마다 사물의 위치가 바뀔 수 있습니다.

해야 할 일:

1) 브레이크 포인트가 켜진 디버그

2) 글로벌 브레이크 포인트를 추가하십시오 : OBJC_Exception_throw

그런 다음 디버거 창을보십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top