相关疑难解决方法(0)

如何使用GDB检查堆栈帧?

现在我一直在使用GDB来反汇编二进制文件并检查不同的寄存器和诸如此类的东西.是否有一个简单的命令来检查堆栈中的所有内容?这可以局限于函数中的所有内容吗?

stack gdb

62
推荐指数
4
解决办法
8万
查看次数

Stackoverflow和函数指针

我很遗憾这个,我希望这里有人可以提供帮助.

我的应用程序包含数百个评估数字代码的函数(源代码各自在5MB范围内),我用std::map函数指针管理函数.显然发生的是当我尝试将参数传递给其中一个函数时,我得到一个堆栈溢出,由一个指向它的指针访问:

gdb输出:

Program received signal SIGSEGV, Segmentation fault.
0x0000000001ec0df7 in xsectiond149 (sme=Cannot access memory at address 0x7fffff34b888
) at xsection149.c:2
2       Poly3 xsectiond149(std::tr1::unordered_map<int, Poly3> & sme, 
                           EvaluationNode::Ptr ti[], ProcessVars & s)
Run Code Online (Sandbox Code Playgroud)

和xsection149.c:2只有用于定义函数的左大括号.

/proc/<pid>/map 对于该过程显示最接近触发错误的地址的地址范围只有这一行:

7ffffff74000-7ffffffff000 rw-p 7ffffff73000 00:00 0                      [stack]
Run Code Online (Sandbox Code Playgroud)

所以上面错误中的地址超出范围.

现在我的问题是:我如何解决这个问题?我无法解决我在堆上分配的问题...

在我的主要例程中发生的唯一想法是:

// A map containing O(10^4) Poly3 (struct with 6 doubles)
tr1::unordered_map<int, Poly3> smetemp;
// populates smetemp
computeSMEs(smetemp);
// Map of function pointers of type, O(10^3) elements
tr1::unordered_map<int, xsdptr> diagfunctions = get_diagram_map(); 
Run Code Online (Sandbox Code Playgroud)

怎么会溢出堆栈?

编辑:我试图在valgrind运行它,这是我得到的错误和谷歌没有提供任何有意义的信息:

valgrind: …
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow function-pointers

5
推荐指数
1
解决办法
846
查看次数

标签 统计

c++ ×1

function-pointers ×1

gdb ×1

stack ×1

stack-overflow ×1