lldb不会打印终端中的所有字符

时间:2016-12-16 20:06:44

标签: c++ xcode macos lldb

我正在使用Terminal中的lldb来调试C ++程序。我可以将它用于大多数事情,除非它不会打印某些字符。

在某些时候,我的程序从远程系统(vector<unsigned char>)接收一个字节数组,当我打印该值时,我得到以下内容:

  [10] = '\0'
  [11] = '\0'
  [12] = 'O'
  [13] = '\b'
  [14] = '\0'
  [15] = '\x01'
  [16] = '\0'
  [17] = '\0'
  [18] = '\0'
  [19] = '\x17'
  [20] = '\0'
  [21] = '\x04'
  [22] = '?'
  [23] = '?'
  [24] = '?'
  [25] = '?'
  [26] = '\0'
  [27] = '\0'
  [28] = 'n'
  [29] = 'a'
  [30] = 'm'
  [31] = 'e'
  [32] = '\0'
  [33] = '\0'
  [34] = '\0'

使用Xcode我可以看到四个?标记已经变为四个\xff。有没有办法让lldb在没有Xcode的情况下正确打印这些字符?

1 个答案:

答案 0 :(得分:1)

如果要查看字符数组元素的十六进制值,可以使用lldb对gdb格式化synatax的仿真:

(lldb) print/x char_vec

要查看所有可用的格式选项,请执行以下操作:

(lldb) help gdb-format
顺便说一下,我不确定这是“正确打印它们......”是对的。如果我有一个带有一些0xff值的字符数组,printf会将它们打印为'?'。这是该值的字符表示。默认情况下,lldb通过将它们解释为printf来打印char变量。如果使用lldb的数据格式化程序更适合您,可以将此默认值更改为十六进制。参见:

http://lldb.llvm.org/varformats.html

了解更多详情。