簡體   English   中英

在調試器中觀察向量元素的簡單方法

[英]An easy way to watch a vector element in debugger

我正在使用Visual Studio 2013,並且在其悠久的歷史中,它始終無法在調試器中顯示向量元素,抱怨no operator "[]" matches these operands消息。 我知道有一個解決方法需要輸入v.operator[](n) ,但這對我來說是不可接受的。 我想將光標懸停在v[n]上方並查看其值或最多選擇或剪切並粘貼v[n]以查看值。 是否可以使用其他Windows C ++ IDE?

我知道矢量的所有元素都顯示在AutosLocals窗口中,但是我的矢量太長,不適合實用。

只需在Watch字段中使用_Myfirst為每個[]添加前綴:

YourVector._Myfirst[n]

欺騙在這里:

假設你有一個std::vector<int> v; 並且你想在手表v[23]v[23]..v[23+n]看到這樣做:

  1. 將變量添加到監視窗口。
  2. ,! 在變量名稱之后(例如: v,! ),這表示要關閉調試器可視化的VS.
  3. 展開矢量成員,直到看到_Myfirst_Mylast_Myend _Myfirst添加到手表中。 這是指向向量存儲器開頭的指針。
  4. 刪除v,! 如果你想,從手表。
  5. 要將_Myfirst元素添加到手表末尾添加+ offset, count偏移量是您希望在手表中首先看到的向量索引,count是要查看的向量元素的數量。 將是這樣的: (*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + 23, 100 這讓你看到從位置23開始的向量的100個元素(是的,我知道它是_Myfirst元素的大)。 您可以使用變量指定offsetcount (例如:匹配代碼中的表達式,如v[n]用作偏移量ncount您想要的任何值,常量或變量。

關於調試技巧和訣竅的一些信息,從 17分鍾到第28集都有一些好處,評估表達式可能在評論中。 示例您有一些代碼。

v[n] = ... + pre_calculate(v[n]) + ...
// You could put a comment like this:
// (*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + n, 100
// And when you hover the mouse over the selected expression, you see the evaluation. Much better I think.

在MSVC的標准庫實現中, _M_start_M_finish_M_end_of_storage_Vector_base中可以使用的公共成員。

vector._M_start[n]

此方法對您使用的任何C ++ IDE都有效; 首先,您必須知道存儲第一個元素的向量成員名稱。

(在borland 6 c ++中)你可以通過在已經添加到watch窗口后檢查向量來完成此操作。 在Visual中,它被稱為不同的。

然后,您必須在watch中添加以下語法:nameVector.memberWichPointsToTheFirstElement [startIndex],numElementsDesiredToDisplay。

而你完成了。 但是當向量在實例中時,它不會顯示任何說法:不允許副作用。

暫無
暫無

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

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