【发布时间】:2012-04-10 07:03:27
【问题描述】:
我正在测试一个函数 vect_dbg(vector<int>),它将 STL 向量的内容作为 C 字符串返回,因此我可以使用 gdb output vect_dbg(test) 调用它或将其放入手表中。
#include<vector>
using namespace std;
int main()
{
vector<int> test; //breakpoint; output vect_dbg(test) ends debugging.
for (int i=0;i<=10;i++) test.push_back(i);
return 0;
}
#include<sstream>
const char* vect_dbg(const vector<int> &V)
{
stringstream ss;
for (int i=0;i<V.size();i++)
ss<<"V["<<i<<"]:"<<V[i]<<' ;'; //line 16
static char sEnu[256];
ss.getline(sEnu,256);
return sEnu;
}
不幸的是,output vect_dbg(test) 中断了调试。
正在调试的程序在调用的函数中发出信号 来自 GDB。 GDB 已将上下文恢复到调用前的状态。 要更改此行为,请使用“set unwindonsignal off” 包含函数 (vect_dbg(std::vector > const&)) 的表达式将被放弃。收到的节目 信号 SIGSEGV,分段错误。 vect_dbg 中的 0x004014b1 (V=@0x22ff34) 在 main.cpp:16
我发现如果我将test 设为全局,该函数就可以工作,但我无法为本地定义的向量找到解决方案。我该如何解决这个问题?非常感谢。
编辑:主要解决了,答案很明显,向量没有在断点处初始化。现在我想知道是否可以在vect_dbg 中检测到它。
我发现的另一种方法是声明vector<int> static。
【问题讨论】:
标签: c++ debugging function stl scope