首页 > 解决方案 > 什么是 SBLineEntry.GetLine()?

问题描述

SBLineEntry是 LLDB Python 接口中的代理对象。SBLineEntry.GetColumn()返回一行中的点,但我不确定它的实际含义。

在 C++ 端源代码中,它解析为LineEntry.column值,但它也缺乏衡量它的方式。

起初,我认为它是 UTF-8 代码单元偏移量。但这似乎不是因为当我测量它时,它看起来像 UTF-16 代码单元偏移。但我仍然找不到这个值的任何定义。

这个值是多少?

标签: apilldb

解决方案


这是个好问题!如果调试信息是 DWARF(Windows 系统除外),则 lldbDNS_LNS_set_column将 DWARF 行表中的数据作为SBLineEntry::GetColumn(). DWARF5 规范没有说明这个整数的计数——它只是说,

DW_LNS_set_column 操作码采用单个无符号 LEB128 操作数并将其存储在状态机的列寄存器中。

您可能会看到 clang 将 UTF-16 代码单元偏移量放在 DWARF 中,但标准并不要求这样做。这将是向 DWARF 标准委员会提交的合理澄清请求,http://dwarfstd.org


推荐阅读