2011-06-25 154 views
3

我正在使用epoll在Linux机器上进行服务器编程,我在调试时遇到了问题。现在我已经把日志语句放在了整个地方。它有助于看到它什么时候爆炸,但它很难看出为什么..如何获取堆栈跟踪信息?

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

在此先感谢...

编辑:

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

+1

我想你会需要一个调试器。可能是GDB,因为你在Linux上 – Tim

+0

尝试在[gdb](http://www.gnu.org/software/gdb/)下运行你的程序。它有名为'bt'的命令,它可以做你想做的事。 – beduin

+0

如果“爆炸”意味着崩溃(如sigsegv),那么你可以用调试信息编译程序,启用核心转储,然后在coredump上使用gdb。 Coredump应该告诉你程序崩溃的地方。 – rve

回答

1

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

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

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

+0

在我的make文件中,我设置了CC:= g ++和CFLAGS:= -DDEBU1 -DCONFIG_EMBEDDED -DUSE_IND_THREAD -DFIXED。我把这一切:$(CC)$(CFLAGS)-o服务器$(SOURCE)$(LIBS)所以我添加-g后-o?在此先感谢... – user800799

+0

而开始gdb你可以有断点。文件名:lineno 或class:functionname。 设置使用中断和比你的断点说明符。 使用运行来启动应用程序,gdb将在其中一个断点到达时停止。 那里你可以使用bt命令来查看括号。 –

+0

你也可以使用print来观察变量。阅读gdb教程以获取更多信息。 –

1

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

根据你想要什么样的信息,看看/proc/<pid>/stack可能会有所帮助。