2016-12-16 2 views
0

Я использую lldb от терминала для отладки программы на C++. Я могу использовать его для большинства вещей, кроме того, что он не будет печатать определенные символы.lldb не будет печатать все символы в терминале

В какой-то момент моя программа получает массив байтов из удаленной системы (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

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

(lldb) print/x char_vec 

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

(lldb) help gdb-format 

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

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

для более подробной информации.

Смежные вопросы