2017-01-02 12 views
5

मुझे मिल गया है परीक्षण कार्यक्रम नीचे की तरह:जीडीबी के अंदर एक स्मार्ट सूचक के आंतरिक डेटा को कैसे देखें?

#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

* "मूल्य में स्टोर स्टोर" * के साथ आपका क्या मतलब है? 'Int'' si' का मान इंगित करता है? –

+0

संभावित डुप्लिकेट [जीडीबी में std :: tr1 :: साझा \ _ptr का लक्ष्य कैसे प्राप्त करें] (https://stackoverflow.com/questions/24917556/how-to-access-target-of-stdtr1shared-ptr-in -जीडीबी) | 'unique_ptr': https://stackoverflow.com/questions/22798601/how-to-debug-c11-code-with-unique-ptr-in-ddd-or-gdb –

उत्तर

1

निम्नलिखित का प्रयास करें:

p *si._M_ptr 

अब, यह मानता है कि आप libstdc++.so उपयोग कर रहे हैं, p si के लिए उत्पादन को देखते हुए।

वैकल्पिक रूप से, आप मूल्य 0x614c20 सीधे (अपने उत्पादन से) इस्तेमाल कर सकते हैं:

p {int}0x614c20 

दोनों मूल्य 5 प्रदर्शित करना चाहिए।

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 
संबंधित मुद्दे