Ho bisogno di eseguire il debug di heap overflow in un progetto molto grande. Dopo aver giocato un po 'con valgrind, sembra lo strumento perfetto per rilevare i sovraccarichi dei blocchi di heap in C, quindi mi piacerebbe eseguire la nostra app iOS con esso.È possibile eseguire valgrind sul simulatore e sul dispositivo iOS?
Ho costruito e installato valgrind dal trunk su OS X Yosemite e ho scritto un programma di test con heap intenzionale in overflow e verificato che valgrind rileva e li segnala.
Ora voglio eseguire un'app di prova nel simulatore con esso. Ho letto che può essere eseguito nel simulatore iOS usando execl(), ma quando lo faccio, vedo il seguente errore nella console.
dyld: comando di caricamento mancante LC_DYLD_INFO
Dopo di che, l'applicazione sarà in crash in dyldbootstrap :: rebaseDyld() con EXC_BAD_ACCESS. C'è qualcos'altro necessario qui? A quanto pare ora Valgrind supporta anche l'arm64. È possibile impacchettare l'eseguibile valgrind con la mia app ed eseguirlo su un dispositivo?
#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]));
}
}
Ho avuto lo stesso identico problema. Valgrind funziona su file eseguibili non simulatori. Questo trucco di execl funzionava prima ... – dbv
Ciao, hai già trovato la soluzione? :) apprezzerebbe davvero una soluzione alternativa per questo problema. –