【问题标题】:gdb function call to a std::vector from the local scope results in errorgdb 函数从本地范围调用 std::vector 导致错误
【发布时间】: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&lt;int&gt; static。

【问题讨论】:

    标签: c++ debugging function stl scope


    【解决方案1】:

    将断点放在一行之后(在for 循环上)。变量test 在您尝试使用时尚未初始化。

    【讨论】:

    • 我花了一分钟才弄清楚你在说什么。当断点被命中时,test 的构造函数尚未运行。
    • 你是对的,谢谢。这很奇怪,因为我记得这是我尝试的第一件事。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多