Перенаправить вывод lldb в файл
Я использую lldb внутри Xcode, и одна из моих переменных содержит огромный кусок данных JSON. Использование po myVar
не очень полезно для анализа этих данных, поскольку оно будет выводиться в крошечной консоли отладки Xcode.
Есть ли способ перенаправить вывод lldb в файл?
Я видел здесь, что такая функция, похоже, доступна на gdb как:
(gdb) set logging on
(gdb) set logging file /tmp/mem.txt
(gdb) x/512bx 0xbffff3c0
(gdb) set logging off
и "переводится" в lldb как:
(lldb) memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0
(lldb) me r -o/tmp/mem.txt -c512 0xbffff3c0
(lldb) x/512bx -o/tmp/mem.txt 0xbffff3c0
Однако команда memory read
не поможет в моем случае, а --outfile
, похоже, не доступна для команды print
.
Ответы
Ответ 1
Вы можете использовать Python script для этого (и многое другое), как описано здесь:
LLDB скрипты Python в Xcode
Создайте файл с именем po.py в каталоге по вашему выбору (например, ~ ~.lldb):
import lldb
def print_to_file(debugger, command, result, dict):
#Change the output file to a path/name of your choice
f=open("/Users/user/temp.txt","w")
debugger.SetOutputFileHandle(f,True);
#Change command to the command you want the output of
command = "po self"
debugger.HandleCommand(command)
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f po.print_to_file print_to_file ')
Затем в консоли отладки напишите:
comma script import ~/.lldb/po.py
print_to_file
Ответ 2
Вот небольшая модификация, включающая некоторые из комментариев сверху:
def toFile(debugger, command, result, dict):
f=open("/Users/user/temp.txt","w")
debugger.SetOutputFileHandle(f,True);
debugger.HandleCommand(command)
f.close()
debugger.SetOutputFileHandle(sys.stdout, True)
Это позволяет команде поставляться в качестве аргумента и возвращает дескриптор выходного файла в stdout после выполнения команды.
Ответ 3
Я создал Python script, который использует memory read
, а затем обрабатывает вывод, чтобы преобразовать его в нужный мне формат (в моем случае одно значение для каждой строки): https://gist.github.com/aleph7/96ec9b3c5df60a07b216