2016-02-29 10 views
1

Я бы ожидал, что смогу статически связать сборку libc с отладочными символами, а затем запустить мою программу через lldb.Как вы отлаживаете libc в OSX?

otool -L <my binary>

делает его похожим на только динамически подключаемой библиотеки (DLL) является:

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 

который я предположил бы, это длл Libc есть (хотя nm не перечисляет все, что я ожидать в libc). Может быть, просто какой-то штурмовик.

В /usr/lib/ кажется, что Apple не предоставляет отладочную сборку libSystem.

Как вы отлаживаете libc на OSX (10.11.3)?

Возможный дубликат: On Mac OS X, how can you get a debug build of System/LibC for source level debugging?

ответ

1

Я с трудом после вашего вопроса, но есть некоторые моменты, которые будут сделаны, которые я думаю, будет охватывать, что вы спрашиваете:

otool - L покажет все dylib, с которыми вы связываетесь.

/usr/lib/libSystem.B.dylib - это библиотека зонтиков, которая реэкспортирует несколько dylib, включая libc (/usr/lib/system/libsystem_c.dylib). Если вы хотите увидеть, какие символы являются частью среды выполнения C, вы хотите использовать nm на этом dylib, а не libSystem.

Если вы статически ссылаетесь на свой собственный libc, то он не будет отображаться в 'otool -L', потому что это статическая библиотека и, следовательно, является частью вашего исполняемого файла.

Если вы статично связали свой собственный libc с вашим исполняемым файлом, то использование nm в вашем двоичном файле, возможно, не отобразит все символы, которые вы ожидаете, потому что компоновщик оптимизирует мертвый код, который не нужен вашему исполняемому файлу. Вы можете убедиться, что все добавлено с помощью параметра -force_load в ld. Для получения более подробной информации посетите страницу ld man.

+0

Спасибо за информацию о нечетной libSystem.B.dylib. Мне было любопытно, единственный способ отлаживать libc - это загрузить + компилировать + статически ссылку на него из Apple с открытым исходным кодом (это один релиз позади, так что вы, вероятно, не сможете получить источник для своего текущая версия OSX). –

+0

Что нужно для отладки внутри Libc? В идеале вы должны пропустить его как черный ящик, который «просто работает» ... если вы считаете, что есть ошибки внутри Libc, пожалуйста, подайте радар на http://bugreport.apple.com –

+0

Я пытаюсь чтобы научить себя сбору, обратившись к тому, что делает libc. –