#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
команды.