簡體   English   中英

如何在 GDB 中訪問 std::tr1::shared_ptr 的目標

[英]How to access target of std::tr1::shared_ptr in GDB

如何訪問 GDB 中 std::tr1::shared_ptr 的目標。 這不起作用:

(gdb) p sharedPtr->variableOfTarget

如果我嘗試使用指針對象本身( p sharedPtr ),我會得到如下結果:

$1 = std::tr1::shared_ptr (count 2) 0x13c2060

使用普通指針,我可以執行p *ptr並獲取所有數據或p ptr->variable僅用於一個變量。

我使用的是 Centos 6.5、GCC 4.4.7-4.el6 和 GDB 7.2-64.el6_5.2。

ptr->get() 並不總是有效。

當我嘗試 ptr->get() 時,gdb 抱怨:無法將方法 ***:get() 解析為任何重載實例

我最終去 /usr/include/ 找到 shared_ptr 的源代碼來查看私有成員。

原來是

ptr._M_ptr

這個對我有用。 源代碼適用於所有人。

試試

(gdb) p (*sharedPtr.get())

該函數返回指向智能指針擁有的對象的指針。

先回答:

p *frame._M_ptr # frame is the shared_ptr's name

我試過p (*frame.get()) ,但沒有用(frame 是我的 shared_ptr 名稱)

(gdb) p frame
$4 = std::shared_ptr (count 2, weak 0) 0x2ea3080
(gdb) p (*frame.get())
Cannot evaluate function -- may be inlined

然后我試圖獲取這個 shared_ptr 中的內容,然后我找到了這個

(gdb) p frame.
_M_get_deleter  __shared_ptr    operator*       reset           unique          ~shared_ptr     
_M_ptr          get             operator->      shared_ptr      use_count       
_M_refcount     operator bool   operator=       swap            ~__shared_ptr   

我使用了它的 _M_ptr 字段,它起作用了。

(gdb) p *frame._M_ptr 
$5 = {
...
}

我使用了 std::shared_ptr 和 gdb 7.6。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM