簡體   English   中英

GDB打印錯誤的值

[英]GDB prints wrong values

使用GDB調試C ++程序時,我遇到了一些問題。

當我使用print object.member ,它並不總是正確打印變量的值。 相反,它將打印我正在調試的函數的參數之一的值。 盡管我始終都更改了object.member的值,但是它並沒有通過函數改變。

事實是,該程序相當大,由幾個模塊組成,帶有部分專用的模板等,因此我無法在此處全部張貼。
現在,我嘗試創建一個最小的測試用例,但是無論我嘗試了什么簡單的方法,都無法使其正常運行。 我的意思是,不行。

因此,我想問的是,有沒有人在GDB中看到過這種行為,您是否找到了造成這種情況的原因以及如何解決它?

這里存在關於類似行為的問題,但是這些問題導致程序無法正確編譯(優化級別過高等)。 我用-Wall -Wextra -pedantic -g -O0編譯了它,所以不能這樣。

程序運行正常; cout << object.member; 並且會輸出期望值,所以我不知道現在該怎么做。

我以前見過類似的行為。 不幸的是,gdb確實是基於C的,因此盡管它可以處理C ++,但我偶爾發現它對顯示值有些挑剔。

當顯示更復雜的項目(例如地圖,字符串或智能指針的已取消引用的內容)時,有時必須非常明確地了解如何取消引用和強制轉換變量。

函數本身是另一種可能性-它有什么不尋常的地方嗎? 例如它是模板化的嗎?

您可以在代碼中創建對此變量的引用並嘗試顯示它嗎? 或獲取變量的地址並取消引用內容-當然只有在公開可用的情況下。

自然,源代碼必須與您編譯的代碼匹配,因此必須早於exe,但gdb通常會向您發出警告

暫無
暫無

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

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