2016-08-09 7 views
0

vector<char>のオブジェクトaがあります。私はそれが10要素長いことを知っています。しかし、私がp a[5]をgdbで実行すると、gdbがシンボルoperator[]を解決できないというエラーが表示されます。gdbで配列にインデックス登録できず、値をプリントする

void foo() 
{ 
    vector<char> a (10, 10); // put a breakpoint here. 
} 

gdbのインデックスの値を印刷する方法を教えてください。

char c1=a[1]; char c2 = a[2]; char c3 = a[3]; // ... so on and forth

は私がc1c2の値を信頼することができ、など

P.S. - 今、私は本当にラメ何かをしました私はDEBUGシンボルで自分のコードを構築しました。

答えて

1

これは、ここで答えはgccとgdbの現在のバージョンに更新することであるGDB 7.11.1

(gdb) b main 
Breakpoint 1 at 0x400bd3: file t.C, line 6. 
(gdb) run 
Starting program: /tmp/t 
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.23.1-8.fc24.x86_64 

Breakpoint 1, main() at t.C:6 
6  std::vector<char> a={'a','b','c','d','e','f'}; 
Missing separate debuginfos, use: dnf debuginfo-install libgcc-6.1.1-3.fc24.x86_64 libstdc++-6.1.1-3.fc24.x86_64 
(gdb) n 
8  std::cout << "Ok" << std::endl; 
(gdb) p a 
$1 = std::vector of length 6, capacity 6 = {97 'a', 98 'b', 99 'c', 100 'd', 
    101 'e', 102 'f'} 
(gdb) p a[2] 
$2 = 99 'c' 

で問題なく動作します。

+0

はカスタムプリティプリンタを書きましたインデックスにある要素を取得するために5を追加し、私は配列の先頭へのポインタにアクセスしていますここでは、この

p *(a._M_impl._M_start+5) 

のようなものを試してみてください? –

+0

いいえ、gdb、Fedoraで24。カスタマイズはありません。 –

0

ベクトルは配列またはポインタと同じではありません。ベクトルには通常、要素へのアクセスに使用できる開始点へのポインタがあります。 5.

関連する問題