如何在LLDB数据格式化程序中登录控制台

时间:2016-05-18 10:24:05

标签: python xcode logging lldb

我已经编写了一个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)时,我确实看到了很多调试输出,但不是我的。

2 个答案:

答案 0 :(得分:2)

我更详细地了解了by looking at the Logger source

  1. 要启用日志记录,您必须将lldb.formatters.Logger._lldb_formatters_debug_level设置为大于0的值。从源本身引用:

    • 如果您将其定义为大于1的任何值,则每次写入后日志将自动刷新(较慢但应确保即使我们崩溃,大部分内容都会记录到日志中)
    • 如果您将其定义为大于2的任何值,则会自动记录调用函数的详细信息(甚至更慢,但提供其他详细信息)
  2. 默认情况下,lldb.formatters.Logger会打印到标准输出。如果您使用Xcode进行调试,则不会看到lldb的stdout流。如果要登录文件,请将lldb.formatters.Logger._lldb_formatters_debug_filename设置为所需的文件名。注意:你必须确保文件是可写的,你不能将它设置为需要shell扩展的路径(例如〜/ logfile.log不起作用,Python不扩展〜)。

  3. 总之,我的__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(...)
    

答案 1 :(得分:0)

遗憾的是,这是一个已知问题

由于LLDB没有为自己的日志记录机制公开SB API,因此lldb.formatters.Logger使用与“log enable”命令分开的日志记录逻辑

如果你要做的就是在编写时调试数据格式化程序,你可以在格式化程序体内使用“print”语句