如何获取堆栈跟踪信息?

时间:2011-06-25 09:56:32

标签: c++ networking error-handling

我正在使用epoll在linux机器上进行服务器编程,我的调试有问题。现在我已经在所有地方放置了日志语句。它有助于看到它何时爆炸,但很难理解为什么......

所以我想知道是否有办法在C ++中打印堆栈跟踪或更多信息。

提前致谢...

编辑:

我在mu make文件中设置-g,如果我在GDB上运行我的服务器,那么它将不会收到任何数据包。我不知道为什么但是如果我在命令行运行它然后它接收数据包但是如果我在GDB上运行它它没有从客户端收到任何东西(我看不到任何日志语句)

4 个答案:

答案 0 :(得分:3)

尝试使用Glibc中的backtrace功能。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

如果您的程序可以检测到它崩溃的时间,您可以写出一个脚本并在其上启动GDB。然后该脚本可以让GDB打印出回溯。

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

答案 3 :(得分:0)

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

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