2017-01-02 59 views
5

私が持っているテストプログラム以下のように:gdb内のスマートポインタの内部データを表示する方法は?

#include<memory> 
#include<iostream> 
using namespace std; 

int main() 
{ 
    shared_ptr<int> si(new int(5)); 
    return 0; 
} 

デバッグそれ:

(gdb) l 
1 #include<memory> 
2 #include<iostream> 
3 using namespace std; 
4 
5 int main() 
6 { 
7  shared_ptr<int> si(new int(5)); 
8  return 0; 
9 } 
10 
(gdb) b 8 
Breakpoint 1 at 0x400bba: file testshare.cpp, line 8. 
(gdb) r 
Starting program: /home/x/cpp/x01/a.out 

Breakpoint 1, main() at testshare.cpp:8 
8  return 0; 
(gdb) p si 
$1 = std::shared_ptr (count 1, weak 0) 0x614c20 

それだけsiのポインタ型の情報を出力しますが、(で、それに格納された値を取得する方法この場合5)? デバッグ中にsiの内部コンテンツを確認するにはどうすればよいですか?

+0

*「価値ストアin si」*とはどういう意味ですか? 'int''の値は' 'si''を指していますか? –

+0

[GDBのstd :: tr1 :: shared \ _ptrのターゲットにアクセスする方法](https://stackoverflow.com/questions/24917556/how-to-access-target-of-stdtr1shared-ptr-in) -gdb)| 'unique_ptr':https://stackoverflow.com/questions/22798601/how-to-debug-c11-code-with-unique-ptr-in-ddd-or-gdb –

答えて

1

は、以下のことを試してみてください。

p *si._M_ptr 

、これはあなたがp siのための出力を考えると、libstdc++.soを使用していることを前提としています。

p {int}0x614c20 

の両方が値5を表示する必要があります。

また、あなたは(あなたの出力から)値0x614c20を直接使用することができます。

0

が、どのように値がそれに

を格納し得るためにあなたがstd::shared_ptrに格納されている実際のポインタ型への生のポインタをキャストする必要があります。実際のポインタの種類を知るには、whatisを使用してください。

(gdb) p si 
$8 = std::shared_ptr (count 1, weak 0) 0x614c20 
(gdb) whatis si 
type = std::shared_ptr<int> 
(gdb) p *(int*)0x614c20 
$9 = 5 
関連する問題