我在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"
也许这是因为在自动加载过程中添加类型摘要时尚未分配“进程”?
有谁知道如何让我的脚本自动加载?
非常感谢
答案 0 :(得分:0)
恩里科已经在lldb-dev上回答了这个问题:
http://lists.llvm.org/pipermail/lldb-dev/2016-September/011236.html
但对于那些跟随的人:
lldb.process
,lldb.thread
等变量只是为了方便在交互式python解释器中使用,而不是为断点,数据格式化程序,命令等运行的Python代码。 / p>
在多线程调试器中尝试向可能运行的任何脚本代码提供“当前线程”的全局概念是没有意义的。相反,运行脚本的每个上下文都知道与其相关的进程/线程/框架。对于数据格式化程序,它们总是传递它们正在处理的值,并通过SBValue.GetProcess()
API了解相关过程。