如何在CLion中添加十六进制手表?

时间:2016-12-12 19:22:37

标签: debugging clion

我需要在CLion中添加十六进制格式的手表。

ltoa(variable, 16)至少在我的系统上无效。

在Java / Python中,我可以有一个解决方法:为我的类编写一个自定义toString() / __str__并让它以我需要的方式显示。 gdbp/x。我如何在CLion中做到这一点?

修改:如果我在代码中定义ltoa(variable, 16),则ltoa有效,因为它并不总是存在于标准库中。

3 个答案:

答案 0 :(得分:7)

set output-radix 16

您可以将此设置为名为.gdbinit的文件中的默认选项,您可以将其放在主目录中,或者从中启动GDB的工作目录(例如,项目根目录)。

答案 1 :(得分:1)

他们添加了十六进制视图作为实验功能:Hexadecimal view

要启用:

  1. 调用“维护”弹出窗口:按Ctrl + Alt + Shift + /或致电帮助|查找操作并搜索维护。选择实验性功能。
  2. 选中cidr.debugger.value.numberFormatting.hex复选框
  3. 转到设置/首选项|构建,执行,部署|调试器数据视图C / C ++并设置复选框显示数字的十六进制值。选择显示十六进制值来代替或与原始值一起显示。

现在,十六进制格式显示在“调试”工具窗口的“变量”窗格和编辑器的内联变量视图中。

答案 2 :(得分:0)

......精制配方后,我明白了。

我写了自己的char *lltoa(long long value, int radix)函数。我现在可以在手表中使用它。

更新:在respective feature request中,Chris White在lldb上找到了OS X的解决方法:

  

我决定进行更多挖掘,并找到了在OS X上设置lldb的方法   强制HEX输出为unsigned char数据类型:

 ​type format add –format hex "unsigned char"
     

如果你想让这个设置持久,你也可以创建一个   .lldbinit文件并将此命令添加到它。一旦你做了这个CLion   将以HEX格式显示此数据类型。

这使得此类型的所有变量都以十六进制显示。

更新2 :我的第一个解决方法非常脏,这里更好。

您可以将格式分配给更具体的类型。调试器跟踪类型继承。因此,向hex添加uint8_t格式不会影响unsigned char。您可以微调显示。

您也可以为结构分配格式。这是我.lldbinit的一个例子:

type format add --format dec int32_t

# https://lldb.llvm.org/varformats.html
type summary add --summary-string "addr=${var.address} depth=${var.depth}" Position