使用gdb调试C ++:如何检查std :: vector的值 - 传入函数

时间:2013-07-02 16:47:07

标签: c++ gdb

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>

void testConst(std::vector<std::string> v1)
{
   std::string& a = v1[0];
   std::cout << a << "\n";
   return;
}

int main()
{
   std::string x1 = "abc";
   std::string x2 = "def";
   std::vector<std::string> v1;
   v1.push_back(x1);
   v1.push_back(x2);

   testConst(v1);

   return 0;
}

GDB:

b main.cpp:21
run
p *(v1._M_impl._M_start)
b main.cpp:10
c
p *(v1._M_impl._M_start)

在第21行,我可以得到正确的v1 [0],即“abc”; 在第10行,我无法得到正确的v1 [0];

问题:在gdb中,如何在第10行得到正确的v1 [0]?

环境:Red Hat Linux环境。

感谢

1 个答案:

答案 0 :(得分:1)

  

在gdb中,怎样才能在第10行得到正确的v1 [0]?

您在v1函数中按值传递testConst变量。 在第10行(return语句)中,此变量超出范围,因此被销毁。这就是为什么你无法可靠地打印v1的值。

您可能希望通过引用传递v1,如下所示:

void testConst(std::vector<std::string>& v1)

通过此修改,v1[0]应该打印好。