lldb не будет печатать все символы в терминале

Я использую 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?


person ruipacheco    schedule 16.12.2016    source источник


Ответы (1)


Если вы хотите увидеть шестнадцатеричные значения элементов массива символов, вы можете использовать эмуляцию lldb синтаксиса форматирования gdb:

(lldb) print/x char_vec

Чтобы увидеть все доступные параметры форматирования, выполните следующие действия:

(lldb) help gdb-format

Кстати, я не уверен, что правильно говорить, что это "правильная их печать...". Если у меня есть массив символов с некоторыми значениями 0xff, printf печатает их как '?'. Это символьное представление этого значения. По умолчанию lldb печатает символьные переменные, интерпретируя их так же, как и printf. Вы можете изменить это значение по умолчанию на шестнадцатеричное, если оно вам больше подходит, используя форматировщики данных lldb. Видеть:

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

Больше подробностей.

person Jim Ingham    schedule 16.12.2016