2015-10-19 2 views
5

ли эти две команды на Linux:В чем разница между objcopy и dsymutil?

objcopy --only-keep-debug foo foo.dbg 
objcopy --add-gnu-debuglink=foo.dbg foo 

эквивалент ниже на макинтош

dsymutil <binary> -o <binary>.dSYM 

Эквивалент в том смысле, что

  1. Это создает автономную отладку файла информации.
  2. Создает ссылку между исполняемым и отладочным информационным файлом.

Тогда для отпарной

это команды на Linux:

objcopy --strip-debug foo 

ИЛИ

strip -g <binary> 

эквивалентна ниже на макинтош

strip -S <binary> 

ответ

2

--only-keep-debug часть objcopy делает функционально то же самое, что и dsymutil.

Нет инструмента для записи двоичного местоположения в dSYM. Скорее, двоичный файл dSYM & имеет общий UUID, а клиенты, которые хотят находить файлы символов, используют фреймворк DebugSymbols, который использует различные трюки (например, импортер Spotlight, пути поиска, «внешний поиск dSYM» и т. Д.), Чтобы найти отдельный файл отладки. Таким образом, нет необходимости в эквиваленте --add-gnu-debuglink.

Массовая версия strip -S действительно выводит информацию об отладке так же, как версия binutils. Разница в том, что strip -S на OS X фактически не уменьшит размер двоичного файла. В OS X отладочная информация всегда хранится вне исполняемого файла - она ​​находится либо в файлах .o, либо в dSYM. В исполняемом файле есть только небольшая «карта отладки», которая сообщает lldb или dsymutil, как связать карлика с файлами .o. strip -S нужно удалить карту отладки.

+0

1. Как происходит соединение в Mac OSX между dSYM и двоичным? 2. Означает ли это, что файлы .o также должны быть переданы dsymutil? –

+0

Нет, dsymutil считывает «отладочную карту» из исполняемого файла, в котором указано расположение всех файлов .o. Это означает, что вы должны иметь файлы .o в исходном местоположении и не разделять бинарный файл, на котором вы хотите запустить dsymutil. Это кажется приемлемым компромиссом для удобства, когда вам не нужно выяснять, какие файлы .o для запуска dsymutil ... –

+0

Думаю, я просто ответил # 2. Что касается №1. Короче говоря, «запустив dsymutil на двоичном». Поскольку двоичный файл знает, где находятся файлы .o (с карты отладки), вам нужно только предоставить dsymutil путь к двоичному файлу, он сделает все остальное. Если вам нужна подробная информация о том, как работает dsymutil, обратите внимание, что в Xcode 7.0 мы переключились с внутренней версии dsymutil на один, реализованный в исходной базе llvm. Поэтому вы можете прочитать источники в llvm/tools/dsymutil, чтобы получить полную историю. –

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