iphone - 8badf00d의 의미는 무엇입니까?




crash (5)

Apple 제공 워치 독에 의해 0x8badf00d exception 가 발생했습니다. 네트워크 응용 프로그램에서 워치 독 타임 아웃 충돌의 가장 일반적인 원인은 주 스레드의 동기식 네트워킹입니다. 4 가지 요인이 있습니다.

동기 네트워킹 - 네트워크 요청을 작성하고 응답 대기를 차단합니다.

메인 스레드 - 동기 네트워킹은 일반적으로 이상적이지 못하지만 메인 스레드에서 동기화 네트워킹을 수행하면 특정 문제가 발생합니다. 주 스레드는 사용자 인터페이스를 실행해야합니다. 상당한 시간 동안 주 스레드를 차단하면 사용자 인터페이스가 허용 할 수 없게 응답하지 않게됩니다.

긴 시간 종료 - 네트워크가 막 (예 : 사용자가 터널로 이동하는 열차에 있음) 경우 일부 대기 시간이 만료 될 때까지 보류중인 네트워크 요청이 실패하지 않습니다. 대부분의 네트워크 시간 초과는 분 단위로 측정됩니다. 즉, 주 스레드에서 차단 된 동기식 네트워크 요청은 사용자 인터페이스가 한 번에 몇 분 동안 응답하지 않을 수 있습니다.

네트워크 시간 초과를 줄임으로써이 문제를 피하려는 시도는 좋은 생각이 아닙니다. 경우에 따라 네트워크 요청이 성공하는 데 많은 시간이 걸릴 수 있습니다. 항상 일찍 시간을 초과하면 아무런 진전을 이루지 못할 것입니다.

워치 독 (watchdog) - iOS에는 사용자 인터페이스를 응답 성있게 유지하기 위해 워치 독 메커니즘이 포함되어 있습니다. 응용 프로그램이 특정 사용자 인터페이스 이벤트에 응답하지 않으면 (시작, 일시 중단, 다시 시작, 종료) 워치 독이 응용 프로그램을 종료하고 워치 독 타임 아웃 오류 보고서를 생성합니다. 워치 독이 제공하는 시간은 공식적으로 문서화되지는 않지만 네트워크 시간 초과보다 항상 적습니다.

두 가지 일반적인 해결책이 있습니다.

비동기 네트워킹 -이 문제의 가장 좋은 해결책은 네트워킹 코드를 비동기 적으로 실행하는 것입니다. 비동기 네트워킹 코드에는 여러 가지 장점이 있습니다. 특히 스레드 걱정없이 네트워크에 안전하게 액세스 할 수 있습니다.

보조 스레드에서의 동기 네트워킹 - 네트워킹 코드를 비동기 적으로 실행하는 것이 어렵지 않은 경우 (동기 네트워킹을 사용하는 대형 휴대용 코드베이스로 작업하는 경우) 보조 스레드에서 동기 코드를 실행하여 워치 독을 피할 수 있습니다.

자세한 정보는 사과 docs 를 참조하십시오.

때로는 내 iPhone 응용 프로그램이 이상한 크래시 로그와 충돌하며 예외 코드를 읽는 것은 0x8badf00d입니다. 스택 트레이스는 앱 실행의 무작위 스냅 샷을 보여 주지만 의심 스럽지는 않습니다. 이것은 거의 일어나지 않으며 그것을 재현하는 방법을 찾을 수 없습니다. 아무도 이런 종류의 예외 및 예외 코드에 대해 더 알고 있습니까?

내 crashlog에서 발췌 한 내용은 다음과 같습니다.

예외 유형 : 00000020
예외 코드 : 0x8badf00d
강조 표시 스레드 : 0

응용 프로그램 특정 정보 :
비활성화하지 못했습니다.

스레드 0 :
...
<아무것도 의심스럽지 않아>
...

알 수없는 스레드가 알 수없는 flavor로 인해 충돌했습니다 : 5, state_count : 1



이것은 유머 감각이 좋은 개발자가 추가 한 오류 코드입니다. 16 진수는 숫자뿐만 아니라 문자도 사용하기 때문에 "0xdeadbeef"와 같이 영어 단어와 거의 비슷한 16 진수를 사용할 수 있습니다. 예외가 특별한 의미가 있다고 확신하지만 큰 증상이 없다면 그것과 관련된, 당신은 아마 너무 많이 걱정하지 않고 그것을 무시할 수 있습니다.


프로그래머가 농담을하는 것입니다. 당신은 당신의 코드를위한 숫자를 선택해야하지만, 그 숫자는 반드시 그 자체로 의미가있는 것은 아닙니다. 8badf00d 는 숫자 2,343,432,205를 쓰는 또 다른 방법이며, 예외 로그의 경우 16 진수로 표시 될 때 '재미있어 보이기'때문에 선택되었습니다.


Exception Type: 00000020Exception Codes: 0x8badf00dException Codes: 0x8badf00d 워치 독 타임 아웃 오류 보고서 입니다. 예외 코드 0x8badf00d"ate bad food" 합니다.

reason for this crash is synchronous activity on main thread. 의 가장 일반적인 reason for this crash is synchronous activity on main thread. 메인 스레드 switch to asynchronous activity 으로 switch to asynchronous activity 것이 수정되었습니다.

자세한 내용은이 Apple 문서를 참조하십시오.





crash