Где lldb.macosx.crashlog?

#lldb #xcode12 #spotlight

Вопрос:

Краткие сведения

В lldb сценариях lldb.macosx.crashlog есть некоторые ошибки, которые мешают мне отлаживать мои сбои. Я хочу найти исходный код этих сценариев и исправить их. Где они?

Я заглянул в /Applications , /Library , и ~/Library с помощью таких команд, как:

 sudo find /Library -name 'lldb.macosx.crashlog*'
 

Подробные сведения

WWDC 2018 414 видео под названием «Понимание сбоев и журналов сбоев» говорит о необходимости запуска command script import lldb.macosx.crashlog lldb . Это импортирует набор сценариев.

 (lldb) command script list 
Current user-defined commands:
  crashlog      -- For more information run 'help crashlog'
  cstr_refs     -- For more information run 'help cstr_refs'
  find_variable -- For more information run 'help find_variable'
  malloc_info   -- For more information run 'help malloc_info'
  objc_refs     -- For more information run 'help objc_refs'
  ptr_refs      -- For more information run 'help ptr_refs'
  save_crashlog -- For more information run 'help save_crashlog'
For more information on any command, type 'help <command-name>'.
 

Основной сценарий для использования из видео WWDC crashlog выглядит следующим образом:

 (lldb) crashlog /Users/jeff/Library/Developer/Xcode/Products/com.myapp/1.2.3 (4)/Crashes/AppStore/hash.xccrashpoint/DistributionInfos/all/Logs/LocallySymbolicated/date-uuid.crash
 

Пока у вас есть файлы dSYM, загруженные из App Store Connect (из-за битового кода), и архив приложений, который вы загрузили в App Store Connect, где-то в вашей файловой системе, crashlog скрипт найдет их в порядке.

Однако случаются следующие ошибки.

Во-первых, проходя через «Получение символов для…» для каждого dSYM, он рано останавливается и выводит трассировку стека.

Затем он выводит эту ошибку о 8 вызовах глубоко в потоке 0:

 error: python exception: can only concatenate str (not "NoneType") to str
 

И в конце концов lldb остается в состоянии, которое disassemble не работает.

Комментарии:

1. mdfind -name crashlog показывает оба /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/macosx/crashlog.py и /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/Python3/lldb/macosx/crashlog.py , которые, по-видимому, предоставляют команды crashlog и save_crashlog (по крайней мере) напрямую.

2. @msbit Спасибо вам! Пожалуйста, добавьте этот комментарий в качестве ответа, чтобы я мог его принять. Я выполнил так много find команд с нулевыми результатами.

3. Кстати, способ понять это после того, как вы поняли, что это разумно command script import , — это оболочка lldb поверх import функциональности текущего интерпретатора сценариев. Он может импортировать модули python по текущему пути PYTHON, или если вы дадите ему файл .py, он поместит этот каталог в путь, а затем выполнит импорт. lldb.macosx.crashlog-это спецификация модуля python для чего-то во встроенном модуле lldb Python, который поставляется в LLDB.framework. Все в модуле lldb будет взято оттуда, хотя многие методы импортированы из C в __lldb.so.

4. @JimIngham написал: «lldb.macosx.crashlog-это спецификация модуля python для чего-то во встроенном модуле lldb Python» Да, я не понимал, что». » был элементом исправления, пока не увидел комментарий msbit. Спасибо, что подтвердили это, тхо.

Ответ №1:

В macOS это может оказаться mdfind полезным, если вы не уверены в имени файла или местоположении; он использует то же центральное хранилище метаданных, что и Spotlight.

Выполняется:

 mdfind -name crashlog
 

на моем компьютере перечислены (среди прочего) эти соответствующие файлы:

 /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/macosx/crashlog.py
/Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/Python3/lldb/macosx/crashlog.py
 

Они обеспечивают:

  • crashlog и
  • save_crashlog

команды.