2016-12-16 51 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

如果你想看到的字符數組元素的十六進制值,你可以使用gdb的LLDB的模擬格式synatax:

(lldb) print/x char_vec 

要看到所有的格式選項可用做:

(lldb) help gdb-format 

順便說一句,我不確定說這是「正確打印......」是正確的。如果我有一個帶有一些0xff值的字符數組,printf將它們打印爲'?'。這是這個值的字符表示。默認情況下,lldb通過將它們解釋爲printf來打印char變量。如果使用lldb的數據格式化程序更適合您,可以將此默認值更改爲十六進制。請參閱:

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

瞭解更多詳情。