如何获取堆栈跟踪信息

How do I get the stack trace information?

本文关键字:堆栈 跟踪 信息 获取 何获取      更新时间:2023-10-16

我正在linux机器上使用epoll进行服务器编程,调试时遇到问题。现在我已经把日志语句放得到处都是了。看看它什么时候爆炸有帮助,但很难理解为什么。。

所以我想知道是否有一种方法可以在C++中打印堆栈跟踪或其他更多信息。

提前感谢。。。

编辑:

我在mu-make文件中设置了-g,如果我在GDB上运行服务器,它就不会收到任何数据包。我不知道为什么,但如果我在命令行上运行它,它就会接收数据包,但如果在GDB上运行它就不会从客户端接收任何信息(我看不到任何日志语句)

在Glibc中尝试backtrace函数。

您可以使用gdb调试器运行程序。

如果您正在使用gcc,则必须使用-g或其他调试标志重新编译它。

因此,您的exe包含有关程序的更多信息。

如果你的程序能够检测到它何时崩溃,你可以写一个脚本并在上面启动GDB。然后这个脚本可以让GDB打印出回溯。

根据您想要的信息类型,查看/proc/<pid>/stack可能会有所帮助。

我正在使用GLIBC中的backtrace(),它运行良好(可以使用UDP协议通过网络额外收集回溯):

http://blog.aplikacja.info/2010/12/backtraces-for-c/