lldb类型摘要提供程序 - SBProcess无效

时间:2016-09-13 06:00:43

标签: types lldb provider summary

我在Ubuntu 16.04上为wstring写了一个16位wchar的lldb类型摘要提供程序。

如果我在lldb中手动执行以下操作,那么工作正常:

static string to_string(time_point<system_clock> time)
{
    return to_string(time, "%Y-%m-%d-%H-%M-%S");
}

static string to_string(time_point<system_clock> time, const char* format)
{
    time_t tt = system_clock::to_time_t(time);

    char str[1024];
    if (std::strftime(str, sizeof(str), format, std::localtime(&tt)))
        return string(str);
    else return string();
}

我尝试通过将以下内容添加到.lldbinit来简化自动加载:

href="#0"

然后在打印wstring变量时出现“SBProcess无效”失败。

我的类型汇总函数有以下内容,我认为是遇到错误的地方:

(lldb) script import mytypes
(lldb) type summary add -F mytypes.wstring_SummaryProvider "std::__1::wstring"

也许这是因为在自动加载过程中添加类型摘要时尚未分配“进程”?

有谁知道如何让我的脚本自动加载?

非常感谢

1 个答案:

答案 0 :(得分:0)

恩里科已经在lldb-dev上回答了这个问题:

http://lists.llvm.org/pipermail/lldb-dev/2016-September/011236.html

但对于那些跟随的人:

lldb.processlldb.thread等变量只是为了方便在交互式python解释器中使用,而不是为断点,数据格式化程序,命令等运行的Python代码。 / p>

在多线程调试器中尝试向可能运行的任何脚本代码提供“当前线程”的全局概念是没有意义的。相反,运行脚本的每个上下文都知道与其相关的进程/线程/框架。对于数据格式化程序,它们总是传递它们正在处理的值,并通过SBValue.GetProcess() API了解相关过程。