2015-01-18 15 views
5

Ich muss Heap-Überläufe in einem sehr großen Projekt debuggen. Nachdem ich mit Valgrind ein bisschen gespielt habe, scheint es das perfekte Tool für das Erkennen von Heap-Block-Überläufen in C zu sein, also würde ich gerne unsere iOS-App damit ausführen.Ist es möglich, Valgrind auf dem iOS-Simulator und -Gerät auszuführen?

Ich habe Valgrind von Stamm auf OS X Yosemite gebaut und installiert und habe ein Testprogramm mit absichtlichen Heap-Überläufen geschrieben und verifiziert, dass Valgrind fängt und meldet sie.

Jetzt möchte ich eine Test-App im Simulator damit laufen lassen. Ich habe gelesen, dass es im iOS-Simulator mit execl() ausgeführt werden kann, aber wenn ich dies tue, sehe ich den folgenden Fehler in der Konsole.

dyld: fehlende LC_DYLD_INFO Ladebefehl

Danach wird die App in dyldbootstrap Absturz :: rebaseDyld() mit EXC_BAD_ACCESS. Ist hier etwas anderes notwendig? Valgrind unterstützt Arm64 offenbar auch jetzt. Ist es möglich, die ausführbare Datei von Valgrind mit meiner App zu paketieren und sie auf einem Gerät auszuführen?

#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

Ich habe genau das gleiche Problem. Valgrind läuft auf Nicht-Simulator-Executables. Dieser Trick hat früher funktioniert ... – dbv

+2

Hallo, hast du die Lösung schon gefunden? :) Würde eine Problemumgehung für dieses Problem wirklich schätzen. –

Antwort

0

können Sie xcrun simctl spawn verwenden einen beliebigen Prozess auf dem Simulator zu starten, aber man kann nicht macOS ausführbare Dateien im Simulator-Umgebung ausgeführt werden. Er teilt den Kernel mit macOS, ist aber ansonsten verschieden. Sie müssten Valgrind für iOS erstellen und dann im Datenverzeichnis des Geräts ablegen und versuchen, es zu erstellen.