【问题标题】:lldb won't print all characters in Terminallldb 不会在终端中打印所有字符
【发布时间】:2016-12-16 20:06:44
【问题描述】:

我正在使用终端中的 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 的情况下正确打印这些字符?

【问题讨论】:

    标签: c++ xcode macos lldb


    【解决方案1】:

    如果要查看字符数组元素的十六进制值,可以使用 lldb 模拟 gdb 格式化语法:

    (lldb) print/x char_vec
    

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

    (lldb) help gdb-format
    

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

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

    了解更多详情。

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多