Мне нужно отлаживать переполнение кучи в очень большом проекте. Поиграв с valgrind немного, он кажется идеальным инструментом для обнаружения переполнения блоков кучи на C, поэтому я хотел бы запустить приложение iOS с ним.Можно ли запустить valgrind на iOS-симуляторе и устройстве?
Я построил и установил valgrind с багажника на OS X Yosemite и написал тестовую программу с преднамеренным переполнением кучи и проверил, что valgrind ловит и сообщает о них.
Теперь я хочу запустить тестовое приложение в симуляторе с ним. Я прочитал, что его можно запустить в симуляторе iOS с помощью execl(), но когда я это сделаю, я вижу следующую ошибку в консоли.
dyld: команда отсутствует LC_DYLD_INFO нагрузка
После этого приложение будет врезаться в 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
Привет, вы нашли решение? :) Понравилось бы обходное решение этой проблемы. –