2014-12-04 93 views
2

我只是調試運行的C++程序,我纔有價值GDB如何打印矢量<bool>值

vector<bool> B(n, 0); 

我的問題是如何打印它的值在gdb控制檯?因爲eclipse IDE不太聰明,所以不能以可改變的格式顯示它。

當我有整數向量我可以這樣做:

printf "%x %x %x", B[0], B[1], B[2]... 

,所以我能讀這個矢量。但使用布爾值很難,因爲printf沒有打印格式,我也無法輸入控制檯p B [0]; p B [1] ...

所以也許任何人有想法如何調試這樣的東西?

回答

2

bitset是一個遠遠好於vector<bool>的選項。

除了其他原因,因爲它支持流操作符,所以你可以流這個東西了。

這當然假定數據類型在您的控制之下。

隨着printf你可以使用bitsetto_string

編輯迴應Enrico

倘若一個bitset不能用它可以打印從GDB vector<bool>元素,但如何在GCC中實現一個vector<bool>需要了解。 vector<bool>的索引運算符是而不是返回bool,但是vector<bool>::reference不是bool,但提供轉換運算符到bool

在此GCC reference具有_M_p構件,其是指向分配用於vector<bool>類的存儲和可用於掩蓋所有,但索引的位一個_M_mask構件。這兩者的組合產生零值或非零值。零表示該位未設置,非零表示該位已設置。

對於vector<bool> foo,你可以用GDB命令打印此組合:

打印*(foo的[I] ._ M_P)&富[I] ._ M_mask

+0

儘管這是一個很好的建議,這不是問題所在。 bitset需要編譯時的大小,而向量沒有,所以有幾次bitset不適合,我在這裏有同樣的問題。 – Enrico 2015-09-13 17:48:15

+0

@Enrico公平點。我已經更新瞭解釋,如何將陷入「矢量」實施中的可憐靈魂完成此任務(在GCC上)。 – 2015-09-14 14:19:15