2011-06-25 208 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可能會有所幫助。