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]));
}
}
Ich habe genau das gleiche Problem. Valgrind läuft auf Nicht-Simulator-Executables. Dieser Trick hat früher funktioniert ... – dbv
Hallo, hast du die Lösung schon gefunden? :) Würde eine Problemumgehung für dieses Problem wirklich schätzen. –