如何在 LLDB 数据格式化程序中登录到控制台
How to log to the console in an LLDB data formatter
我已经编写了一个 LLDB 数据格式化程序,但我无法让我的日志输出显示在 Xcode lldb 控制台中。 data formatter examples 创建记录器并像这样写入它:
def __init__(self, valobj, dict):
logger = lldb.formatters.Logger.Logger()
...
logger >> "Providing synthetic children for a vector named " + str(valobj.GetName())
我做到了,并使用命令启用了 lldb 格式化程序日志
log enable -g lldb formatters
然后当我打印一个变量(例如使用 frame var x
)时,我确实看到了很多调试输出,但不是我的。
不幸的是,这是一个已知问题
由于 LLDB 不为自己的日志记录机制公开 SB API,因此 lldb.formatters.Logger 使用与 "log enable" 命令分开的日志记录逻辑
如果您要做的只是在编写数据格式化程序时调试它,您可以只在格式化程序主体中使用 "print" 语句
我已经弄明白了 by looking at the Logger source 更详细。
要完全启用日志记录,您必须将 lldb.formatters.Logger._lldb_formatters_debug_level
设置为大于 0 的值。引用来源本身:
- 如果您将其定义为大于 1 的任何值,则每次写入后都会自动刷新日志(较慢但应确保即使我们崩溃也能将大部分内容写入日志)
- 如果您将其定义为任何大于 2 的值,将自动记录调用函数的详细信息(甚至更慢,但会提供更多详细信息)
默认情况下,lldb.formatters.Logger
将打印到标准输出。如果您使用 Xcode 进行调试,您将看不到 lldb 的标准输出流。如果要记录到文件,请将 lldb.formatters.Logger._lldb_formatters_debug_filename
设置为所需的文件名。注意:你必须确保文件是可写的,并且不能将它设置为需要 shell 扩展的路径(例如 ~/logfile.log 将不起作用, Python 不会扩展~).
总而言之,我的 __lldb_init_module
看起来像这样:
def __lldb_init_module(debugger, internal_dict):
lldb.formatters.Logger._lldb_formatters_debug_level = 2
lldb.formatters.Logger._lldb_formatters_debug_filename = "/Users/Shared/lldb.py.log"
# followed by debugger.HandleCommand(...)
我已经编写了一个 LLDB 数据格式化程序,但我无法让我的日志输出显示在 Xcode lldb 控制台中。 data formatter examples 创建记录器并像这样写入它:
def __init__(self, valobj, dict):
logger = lldb.formatters.Logger.Logger()
...
logger >> "Providing synthetic children for a vector named " + str(valobj.GetName())
我做到了,并使用命令启用了 lldb 格式化程序日志
log enable -g lldb formatters
然后当我打印一个变量(例如使用 frame var x
)时,我确实看到了很多调试输出,但不是我的。
不幸的是,这是一个已知问题
由于 LLDB 不为自己的日志记录机制公开 SB API,因此 lldb.formatters.Logger 使用与 "log enable" 命令分开的日志记录逻辑
如果您要做的只是在编写数据格式化程序时调试它,您可以只在格式化程序主体中使用 "print" 语句
我已经弄明白了 by looking at the Logger source 更详细。
要完全启用日志记录,您必须将
lldb.formatters.Logger._lldb_formatters_debug_level
设置为大于 0 的值。引用来源本身:- 如果您将其定义为大于 1 的任何值,则每次写入后都会自动刷新日志(较慢但应确保即使我们崩溃也能将大部分内容写入日志)
- 如果您将其定义为任何大于 2 的值,将自动记录调用函数的详细信息(甚至更慢,但会提供更多详细信息)
- 如果您将其定义为大于 1 的任何值,则每次写入后都会自动刷新日志(较慢但应确保即使我们崩溃也能将大部分内容写入日志)
默认情况下,
lldb.formatters.Logger
将打印到标准输出。如果您使用 Xcode 进行调试,您将看不到 lldb 的标准输出流。如果要记录到文件,请将lldb.formatters.Logger._lldb_formatters_debug_filename
设置为所需的文件名。注意:你必须确保文件是可写的,并且不能将它设置为需要 shell 扩展的路径(例如 ~/logfile.log 将不起作用, Python 不会扩展~).
总而言之,我的 __lldb_init_module
看起来像这样:
def __lldb_init_module(debugger, internal_dict):
lldb.formatters.Logger._lldb_formatters_debug_level = 2
lldb.formatters.Logger._lldb_formatters_debug_filename = "/Users/Shared/lldb.py.log"
# followed by debugger.HandleCommand(...)