매우 큰 프로젝트에서 힙 오버 플로우를 디버깅해야합니다. valgrind를 약간 사용한 후에 C로 힙 블록 오버런을 탐지하는 완벽한 도구 인 것처럼 보이므로 iOS 응용 프로그램을 실행하고 싶습니다.iOS 시뮬레이터와 장치에서 valgrind를 실행할 수 있습니까?
저는 OS X Yosemite의 트렁크에서 valgrind를 빌드하고 설치했으며 의도적 인 힙 오버 플로우가있는 테스트 프로그램을 작성하여 valgrind가이를 잡아서보고한다는 것을 확인했습니다.
이제 시뮬레이터에서 테스트 앱을 실행하고 싶습니다. execl()을 사용하여 iOS 시뮬레이터에서 실행할 수 있다고 읽었지만, 그렇게 할 때 콘솔에 다음 오류가 표시됩니다. dyld
: 그 후 실종 LC_DYLD_INFO load 명령
는 응용 프로그램은 dyldbootstrap에 충돌합니다 :: rebaseDyld을() EXC_BAD_ACCESS 함께. 여기에 뭔가 다른 것이 필요한가요? Valgrind는 현재 arm64도 지원합니다. valgrind 실행 파일을 내 응용 프로그램과 함께 패키지화하고 장치에서 실행할 수 있습니까?
#define VALGRIND "/usr/local/bin/valgrind"
int main(int argc, char * argv[]) {
if (argc >= 2 && strcmp(argv[1], "-valgrind") == 0) {
if (execl(VALGRIND, VALGRIND, argv[0], NULL) < 0) {
NSLog(@"Failed to relaunch under valgrind");
exit(1);
}
NSLog(@"Running under valgrind!!");
}
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
나는 똑같은 문제가있다. Valgrind는 비 시뮬레이터 실행 파일에서 잘 실행됩니다. 이 execl 트릭 전에 일하는 데 사용 ... – dbv
안녕하세요, 당신은 아직 해결책을 찾았나요? :) 정말이 문제에 대한 해결 방법을 고맙게 생각합니다. –