2015-01-18 5 views
5

Мне нужно отлаживать переполнение кучи в очень большом проекте. Поиграв с 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])); 
    } 
} 
+2

У меня возникла такая же проблема. Valgrind отлично работает на исполняемых файлах не-симулятора. Этот трюк execl работал раньше ... – dbv

+2

Привет, вы нашли решение? :) Понравилось бы обходное решение этой проблемы. –

ответ

0

Вы можете использовать xcrun simctl spawn начать произвольный процесс на тренажере, но вы не можете запустить MacOS исполняемых файлов в среде моделирования. Он разделяет ядро ​​с macOS, но в остальном отличается. Вам нужно будет построить Valgrind для iOS, а затем отбросить это в каталоге данных устройства и попробовать его размножить.

Смежные вопросы