现在我一直在使用GDB来反汇编二进制文件并检查不同的寄存器和诸如此类的东西.是否有一个简单的命令来检查堆栈中的所有内容?这可以局限于函数中的所有内容吗?
我很遗憾这个,我希望这里有人可以提供帮助.
我的应用程序包含数百个评估数字代码的函数(源代码各自在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)