Как получить «кодовое обозначение» gdb на OSX?

Поскольку мне нужен gdb поддержкой Python, я установил другую версию через

 brew tap homebrew/dupes brew install gdb 

Я хочу использовать этот gdb с Eclipse CDT, где я ввел путь к двоичному в настройках отладки. Однако запуск программы для отладки завершается неудачей со следующим сообщением:

 Error in final launch sequence Failed to execute MI command: -exec-run Error message from debugger back end: Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8)) Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8)) 

Что означает «кодовое обозначение» в этом контексте? Как я могу запустить этот gdb ?

Казалось бы, вам нужно подписать исполняемый файл. См. Эти ссылки для получения дополнительной информации. Вы должны уйти с самоподпиской, если не планируете перераспределять эту версию gdb .

https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html

https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/codesign.1.html

Кроме того, вы можете отключить подписание кода в своей системе, хотя это представляет угрозу безопасности. Для этого попробуйте запустить sudo spctl --master-disable в терминале.

I.1 Кодирование отладчика

Ядро Дарвина требует, чтобы отладчик имел специальные разрешения, прежде чем ему разрешили управлять другими процессами. Эти разрешения предоставляются с помощью кодовой привязки исполняемого файла GDB. Без этих разрешений отладчик будет сообщать об ошибках, например:

 Starting program: /x/y/foo Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8)) 

Для Codesigning требуется сертификат. Следующая процедура объясняет, как ее создать:

  • Запустите приложение Access Keychain (в / Приложения / Утилиты / Keychain Access.app)
  • Выберите «Доступ к цепочке ключей -> Ассистент сертификата -> Создать сертификат …»
  • Затем:
    • Выберите имя для нового сертификата (в качестве примера в этой процедуре будет использоваться «gdb-cert»)
    • Установите «Тип идентификации» на «Self Signed Root»
    • Установите «Тип сертификата» на «Подпись кода»
    • Активируйте опцию «Позвольте мне переопределить значения по умолчанию»
  • Несколько раз нажмите «Продолжить», пока не появится экран «Укажите местоположение для сертификата», затем установите «Брелок для ключей» в «Система»,
  • Нажмите «Продолжить», пока не будет создан сертификат.
  • Наконец, в представлении дважды щелкните новый сертификат и установите «При использовании этого сертификата» в «Всегда доверять»,
  • Выйдите из приложения Keychain Access и перезагрузите компьютер (это, к сожалению, требуется)

После создания сертификата отладчик может быть закодирован следующим образом. В терминале запустите следующую команду …

 codesign -f -s "gdb-cert" /bin/gdb 

… где «gdb-cert» следует заменить фактическим именем сертификата, выбранным выше, и его следует заменить на место, где вы установили GNAT.

Источник: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html

UPDATE: High-Sierra (помощник сертификата – неизвестная ошибка) https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist

Я сделал gdb работу над OSX 10.9 без координирования таким образом (описано здесь ):

  1. Установите gdb с помощью macports. (возможно, вы можете пропустить его)

  2. sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist

    измените строку с -s на -sp в строке 22, col 27.

  3. перезагрузите компьютер.

  4. Использовать gdb

Это очень старая тема, но я добавляю ответ, потому что из многих доступных инструкций только один содержит только правильные шаги, чтобы сделать самостоятельную работу отладчика.

Вы должны создать самозаверяющий корневой сертификат, а затем подписать исполняемый файл gdb вместе с ним, но многие люди жаловались, что он не работает для них. И это не для меня, пока я не наткнулся на эту ссылку .

Ключевой момент, отсутствующий в других руководствах, заключается в том, что вам необходимо перезагрузить компьютер, чтобы изменения вступили в силу. Как только я это сделал, все работало по назначению.

Надеюсь, это поможет другим.

Проверьте доверие к сертификату, ему нужно доверять подписи кода (на yosemite, который является третьим последним в разделе доверия в представлении cert в доступе к цепочке ключей).

Сначала сертификат не был известен для кодовой привязки к цепочке ключей, потому что отсутствовала цель расширения «Подписание кода», вы можете найти это, если заглянете в цепочку ключей и дважды щелкните по сертификату:

введите описание изображения здесь

Я исправил:

введите описание изображения здесь

Затем я добавил сертификат к доверенным сертификатам подписи, после того как я перетащил сертификат из брелка на свой рабочий стол, который создал файл ~ / Desktop / gdb-cert.cer:

 $ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer 

Это было немного сложно, потому что я был введен в заблуждение некоторыми интернет-сообщениями и не смотрел на страницу руководства. Некоторые сказали, что вы должны использовать add-trust ( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Страшный бит заключался в том, что команда преуспела, но не сделала то, что она «должна» (ну, это была неправильная команда, но она должна была сказать мне, что это было неправильно).

После этого я нашел новый сертификат в доверенных сертификатах следующим образом:

 $ security find-identity -p codesigning Policy: Code Signing Matching identities 1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)" (CSSMERR_TP_CERT_EXPIRED) 2) ACD43B6... "gdb-cert" 2 identities found Valid identities only 1) ACD43... "gdb-cert" 1 valid identities found 

В моем случае срок действия сертификата Apple истек, но тот, который я использовал для подписи gdb, не был (ну, я просто создал его сам). Также имейте в виду, что политика называется по-разному для «security add-trusted-cert» (- p codeSign) и команды «security find-identity» (-p кодовое обозначение). Затем я продолжил подписывать gdb, и я также всегда получал:

 $ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb` gdb-cert.cer: no identity found 

потому что у меня создалось впечатление, что я должен был предоставить имя файла сертификата для параметра -sign, но на самом деле это был CN сертификата, который я должен был предоставить, и должен находиться в хранилище доверия. Вы можете найти CN здесь, дважды щелкнув cert в цепочке ключей:

введите описание изображения здесь

или в вышеприведенном выводе «идентификация безопасности для идентификации -p кодовое обозначение». Затем я пошел подписать, и я должен был дать ему правильный брелок:

  codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

Мне нужно было ввести пароль root, чтобы разрешить доступ к цепочке ключей.

Тогда я дал мне рабочий gdb, и он должен предоставить вам подписанное приложение.

Мне пришлось следовать этим указаниям, а не указаниям, предложенным другими.

Я все еще не уверен, что это был поступок killall taskgated или процесс включения пользователя root killall taskgated ситуацию.

Некоторые говорят, что перезагрузка необходима. Я считаю, что с приведенными выше инструкциями это может быть не так.

Я также внес изменения, рекомендованные @ klm123, так что это также может внести вклад.

Обратите внимание, что я использую homebrew, а не macports.

Если использование gdb не является жестким требованием, вы также можете использовать lldb в качестве альтернативы. Он уже находится в вашей системе и не должен быть подписан кодом:

 $ lldb stddev_bugged (lldb) target create "stddev_bugged" Current executable set to 'stddev_bugged' (x86_64). (lldb) b mean_and_var Breakpoint 1: where = stddev_bugged`mean_and_var + 17 at stddev_bugged.c:17, address = 0x0000000100000b11 (lldb) r Process 1621 launched: '/Users/richardschneeman/Documents/projects/21stCentury/02/example-00/stddev_bugged' (x86_64) Process 1621 stopped * thread #1: tid = 0xc777, 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17 14 typedef struct meanvar {double mean, var;} meanvar; 15 16 meanvar mean_and_var(const double *data){ -> 17 long double avg = 0, 18 avg2 = 0; 19 long double ratio; 20 size_t count= 0; (lldb) 

Вот таблица, преобразующая gdb в команды lldb http://lldb.llvm.org/lldb-gdb.html

  • Как отладить скрипт Greasemonkey с расширением Firebug?
  • Могу ли я установить точку останова на «доступ к памяти» в GDB?
  • Как мне работать с ClassNotLoadedException во время отладки?
  • Прикрепить отладчик Intellij-IDEA к запущенному Java-процессу
  • Запуск / установка / отладка приложений Android через Wi-Fi?
  • Spring RestTemplate - как включить полную отладку / протоколирование запросов / ответов?
  • Прикрепить отладчик к экземпляру IIS
  • Как я могу подключиться к Android с ADB через TCP?
  • Как отобразить динамически выделенный массив в отладчике Visual Studio?
  • Отладка нескольких streamов в eclipse
  • Где читать консольные сообщения из background.js в расширении Chrome?
  • Interesting Posts

    Enum – ссылочный тип или тип значения?

    Передача файлов cookie из HttpURLConnection (java.net.CookieManager) в WebView (android.webkit.CookieManager)

    Внешние диски на USB-концентраторе

    Как разделить период времени на равные периоды в Excel

    Доступ к пикселям в OpenCV 2.2

    Как использовать свойство ScanLine для 24-битных растровых изображений?

    java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Исключение. Зачем?

    Используют ли разные базы данных другую цитату с именем?

    Видео в Facebook не воспроизводятся с помощью IE9 и Flash Player

    Каков наилучший способ установки нового шрифта в эмулятор Android?

    Как создать контекст рендеринга OpenGL с прозрачным фоном?

    Как изменить местоположение по умолчанию для стандартного диалогового окна «Сохранить файл» в Mac OS X?

    Что произойдет, если я попытаюсь получить доступ к памяти за пределами области malloc ()?

    gVim найти / заменить счетчиком

    java.lang.IllegalArgumentException: input == null! при использовании ImageIO.read для загрузки изображения в качестве bufferedImage

    Давайте будем гением компьютера.