C++ gdb backtrace未显示main()的完整堆栈跟踪

C++ gdb backtrace未显示main()的完整堆栈跟踪,c++,gdb,C++,Gdb,我正在使用。我的程序在Xalan呼叫的某个地方崩溃了。我希望看到从main()一直到崩溃点的完整堆栈跟踪。我使用以下命令行编译 g++ -o program.out -g -O0 -lxalan-c myprogram.out 我正在使用'backtrace full'命令并获得以下输出 #0 0xb79313b4 in xalanc_1_11::XPath::findRoot(xalanc_1_11::XPathExecutionContext&, xalanc_1_11:

我正在使用。我的程序在Xalan呼叫的某个地方崩溃了。我希望看到从main()一直到崩溃点的完整堆栈跟踪。我使用以下命令行编译

g++ -o program.out -g -O0 -lxalan-c myprogram.out
我正在使用'backtrace full'命令并获得以下输出

 #0  0xb79313b4 in xalanc_1_11::XPath::findRoot(xalanc_1_11::XPathExecutionContext&,    xalanc_1_11::XalanNode*, int const*, int, xalanc_1_11::MutableNodeRefList&) const () from     /usr/lib/libxalan-c.so.111
No symbol table info available.
#1  0xb793afa9 in xalanc_1_11::XPath::step(xalanc_1_11::XPathExecutionContext&, xalanc_1_11::XalanNode*, int const*, xalanc_1_11::MutableNodeRefList&) const
() from /usr/lib/libxalan-c.so.111
No symbol table info available.
#2  0xb793d350 in xalanc_1_11::XPath::locationPath(xalanc_1_11::XalanNode*, int const*,  xalanc_1_11::XPathExecutionContext&) const ()
from /usr/lib/libxalan-c.so.111
No symbol table info available.
#3  0xb7937d22 in xalanc_1_11::XPath::executeMore(xalanc_1_11::XalanNode*, int const*,  xalanc_1_11::XPathExecutionContext&) const ()
from /usr/lib/libxalan-c.so.111
 No symbol table info available.
 #4  0xbffff02c in ?? ()
 No symbol table info available.
上面的堆栈跟踪显然没有显示从main()开始的完整堆栈跟踪,我缺少了什么

只有一个线程在运行,下面是show线程的输出

  Id   Target Id         Frame
 * 1    Thread 0xb6f79980 (LWP 8888) "xmltest.out" 0xb79313b4 in xalanc_1_11::XPath::findRoot(xalanc_1_11::XPathExecutionContext&, xalanc_1_11::XalanNode*, int const*, int, xalanc_1_11::MutableNodeRefList&) const () from /usr/lib/libxalan-c.so.111

很可能堆栈已损坏,因此,您无法看到回溯的来源


虽然对堆栈损坏的影响不是很强,但您可以使用它来获取更多信息。如果您使用的是Linux,您将在发行版的开发包存储库中找到它。

使用-g重建libxalan-c,您应该可以看到它的回溯


如注释中所述,对于某些目标,可能需要-ggdb或-ggdb3而不是-g。

是否可以在main()之前实例化的全局类中使用Xalan?Xalan在我编写的类中使用是的,但在main()的堆栈中实例化,我敢打赌,堆栈已经以某种方式损坏,因此,在回溯中看不到调用函数。虽然
valgrind
对堆栈损坏的影响不是很强,但是您可以使用它来获取更多信息。什么是valgrind?像gdb这样的独立工具?我在哪里可以安装它?它是否有用于opensuse的zypper/rpm包?用-g重建libxalan-c,您应该可以看到回溯。您似乎认为正确的回溯需要
-g
,这是错误的。如果用
-g
重建有帮助的话,那只能是偶然的。“用符号重建xalan”帮助了我。Xalan为调试符号生成的配置脚本提供了一个参数。感谢you@EmployedRussian您可能是对的,完整信息是-ggdb或-ggdb3。