2015-01-18 10 views
5

매우 큰 프로젝트에서 힙 오버 플로우를 디버깅해야합니다. 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])); 
    } 
} 
+2

나는 똑같은 문제가있다. Valgrind는 비 시뮬레이터 실행 파일에서 잘 실행됩니다. 이 execl 트릭 전에 일하는 데 사용 ... – dbv

+2

안녕하세요, 당신은 아직 해결책을 찾았나요? :) 정말이 문제에 대한 해결 방법을 고맙게 생각합니다. –

답변

0

당신은 시뮬레이터에 임의의 프로세스를 시작 xcrun simctl spawn를 사용할 수 있지만 당신은 시뮬레이터 환경에서 맥 OS의 실행 파일을 실행할 수 없습니다. 그것은 macOS와 커널을 공유하지만 그렇지 않으면 별개입니다. iOS 용 Valgrind를 빌드 한 다음 장치의 데이터 디렉토리에 버리고이를 생성 해보십시오.