我正在使用Xalan library。我的程序在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 threads的输出
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
答案 0 :(得分:2)
很可能堆栈已损坏,因此,您无法看到回溯的来源。
尽管valgrind在堆栈损坏方面不是很强,但您可以使用它来获取更多信息。如果您使用的是Linux,则可以在您的发行版的开发包存储库中找到它。
答案 1 :(得分:2)
使用-g重建libxalan-c,你应该看到它的回溯。
如评论中所述,对于某些目标,可能需要-ggdb或-ggdb3而不是-g。