iPhone OS 메모리 문제 - 디버그하는 방법?
-
18-09-2019 - |
문제
나는 iPhone 앱에 꽤 이상한 문제가 있습니다. 즉, 메모리가 손상되는 것과 관련이 있다고 생각합니다.
어느 시점에서 나는 배열을 정렬해야합니다. -[sortArrayUsingFunction]
.
결과는 내가 같은 것으로 메모리를 할당하지 않는 한 정확하지 않습니다. void *test = malloc(2 * sizeof( int ))
메소드 호출 전에 또는 예를 들어 NSLog()
정렬 함수에서 (절대 호출되지 않음).
다시 말해, 정렬은 분류 함수를 호출하기 전에 사용 된 메모리를 약간 증가시키는 경우에만 작동합니다. 나는 이것이 어느 시점에서 기억이 손상되기 때문이라고 생각합니다.
이런 식으로 어떻게 디버그합니까?
해결책
코드 중 일부가 이미 릴리스 된 객체를 사용하는 것처럼 들립니다. 이런 종류의 오류를 디버깅하는 데 도움이되는 많은 도움이 Apple 's Great에서 제공됩니다. Mac OS X 디버깅 매직 기술 노트, 특히 기초 부분.
귀하의 경우 AutorELEASE 풀을 비활성화합니다 (환경 변수 설정 NSEnableAutoreleasePool=NO
) 또는 좀비 기능을 사용합니다 (NSZombieEnabled=YES
) 출시 된 개체에 메시지를 보내는 장소를 찾으려면.
다른 팁
Valgrind의 시뮬레이터에서 프로그램을 실행해보십시오.
시뮬레이터에서 사용하는 방법 :
http://landonf.bikemonkey.org/code/iphone/iphone_simulator_valgrind.20081224.html
설치된 위치에 따라 코드 예제에서 Valgrind 경로를 변경해야 할 수도 있습니다.
그러한 것들은 디버깅하기가 어려울 수 있습니다. 바운드 외 액세스를 감지하기위한 몇 가지 도구 등이 있으므로 다른 플랫폼에서 그러한 도구가 있으므로 iPhone을위한 무언가가있을 것이라고 생각하지만 아무것도 모릅니다.
아마도 배열의 두 부를 저장하고 차이점을 비교해야 할 것입니다. 차이점을 인쇄하십시오. 배열 중 하나에 소개 된 "정크"의 특성은 어디에서 왔는지에 대한 힌트를 줄 수 있습니다.
또한이 시점 이전에 실행되는 코드를 살펴보고 다시 읽으십시오 (또는 더 나은 사람이 읽도록하십시오). 버그를 발견 할 수 있습니다.