Как нейтрализовать «Не удалось открыть OSO» и заставить «o» загружаться:
Отказ от ответственности: вы не должны делать это:)
Как объяснено ранее , сообщения об ошибках сообщают вам, что вашей отладочной информацией является неверная информация для вашего dylib.
Однако, если по какой-то экзотической причине вы считаете, что ваши «o» -файлы - хотя они могут быть с неправильными временными метками - действительно содержат правильную информацию, и вам нужно, чтобы они были загружены в gdb, тогда продолжайте ...
Для приведенного ниже примера кода я предполагаю, что o файл с именем abcdefg.o
и dylib с именем lib_jklmnop.dylib
Шаг первый. Выполните эту команду:
nm -ap lib_jklmnop.dylib | grep OSO | awk '{printf("%s %s\n", toupper($1), $0 )}'
Вывод должен содержать:
00000000560D902C 00000000560d902c - 03 0001 OSO /some/file/path/abcdefg.o
Примечание: вы должны найти строку вывода с "abcdefg.o" в ней.Мы исправляем предупреждение OSO только для одного файла: abcdefg.o, поэтому, если вы не используете временную метку, соответствующую этому файлу, следующие шаги не имеют смысла.
Шаг второй. Выполнитьшестнадцатеричное число в первом столбце (в нашем примере 560D902C) и запустите его через python так:
echo import datetime\; t=datetime.datetime.fromtimestamp\( 0x560D902C \) \; print \( t.strftime\(\'%Y%m%d%H%M.%S\'\) \) | python3
(Вы можете использовать perl или что-то еще для этого шага. Python казался доступным и переносимым для демонстрациицели.) Приведенное выше примет «0x560D902C» и создаст отформатированную метку времени: 201510011257.32
Шаг третий. Используя отформатированную метку времени, полученную на шаге 2, выполните команду touch
, чтобы изменитьвременная метка на abcdefg.o:
touch -t 201510011257.32 abcdefg.o
Теперь временная метка на «o» соответствует записи OSO в dylib.GDB загрузит этот файл «o».
(Для потомков: протестировано на Mac OS X 10.8.5 с GNU gdb 6.3.50-20050815 Apple, версия gdb-1824)
Рекомендуемое чтение:
Схема отладки Apple DWARF
Bugzilla @ Mozilla - GDB жалуется на то, что файлы .o имеют более новую временную метку, чем исполняемый файл