2017-06-19 51 views
0

我有沒有用在編譯的任何知識 國旗一些可執行建造它(優化,調試信息等)訪問向量的向量在gdb

它裏面,我有所謂的輸入變量的函數 (通過引用傳遞):

void F(std::vector<std::vector<unsigned char> > &values) { // ... } 

我使用gdb來打印安慰:

(gdb) print values 

而且我得到這個:

$15 = std::vector of length 1, capacity 1 = {std::vector of length 4, capacity 4 = {0 '\000', 0 '\000', 50 '2', 0 '\000'}} 

也就是說,大小爲1的矢量,拿着大小4.

的矢量當我試着使用gdb來訪問內部尺寸4載體:

(gdb) print values[0] 

我得到這個:

Could not find operator[]. 

^h H但是,當我編譯和調試一個簡單的 「你好載體世界的載體」,與沒有優化,並-ggdb標誌

(gdb) print values 

我得到這個:

$2 = std::vector of length 1, capacity 1 = {std::vector of length 3, capacity 3 = {48 '0', 49 '1', 50 '2'}} 

當我嘗試訪問內部向量:

(gdb) print values[0] 

一切正常:

$3 = std::vector of length 3, capacity 3 = {48 '0', 49 '1', 50 '2'} 

難道這是一個優化問題?調試信息??

任何幫助非常感謝...謝謝!

回答

1

難道這是一個優化問題?

是的。

當你print values[0],GDB試圖找到一個函數來調用,在這裏std::vector<unsigned char>::operator[](size_t)。在未優化的情況下,GDB會找到它,調用它並打印結果。在優化的情況下,該函數已被內聯,因此GDB可以使用的可執行文件中沒有外部可調用的函數;因此Could not find operator[]錯誤。