2011-05-09 172 views
69

我正在運行gdb並想檢查其中一個不幸的神對象。它需要很多頁面(我有一個24英寸的顯示器翻過來!)看到整個事情。爲了便於使用,我希望gdb將對象打印到文件而不是屏幕上,以便我可以打開它六左右移動自如。與所有gdb的通用性,必須有辦法做到這一點,對不對?Gdb打印到文件而不是標準輸出

回答

111

您需要啓用日誌記錄。

(gdb) set logging on 

你可以告訴它要使用的文件。

(gdb) set logging file my_god_object.log 

而且您可以檢查當前的日誌記錄配置

(gdb) show logging 
+7

如果您希望將輸出僅發送到日誌文件,請使用'set logging redirect on'。 – 2016-09-05 08:30:37

10

我發現,您可以通過run命令從gdb的輸出重定向到一個文件:

(gdb) run > outfile 
+5

這將是正在調試的程序的輸出,而不是gdb本身的輸出。 OP想要記錄gdb自己的輸出。 – 2015-05-06 15:08:57

+0

另請參閱:http://stackoverflow.com/questions/2388561/block-output-of-debugged-program-gdb – 2016-02-17 15:25:48

+0

@thepaul但這實際上是非常有用的,因爲我正在調試一個QT程序,它只會破壞gdb的標準輸入與它的QDebug垃圾 – rostamn739 2016-06-16 14:47:04

2

一個簡單的方法來登錄GDB到一個文件,同時還看到輸出(這減輕寫命令)是使用tee

gdb command |& tee gdb.log 
4

擴展上@ qubodup的回答

gdb core.3599 -ex bt -ex quit |& tee backtrace.log 

-ex交換機運行gdb命令。所以上面加載核心文件,運行bt命令,然後運行quit命令。輸出寫入backtrace.log並且也在屏幕上。

另一個有用的gdb調用(讓來自所有線程局部變量堆棧跟蹤)是

gdb core.3599 -ex 'thread apply all bt full' -ex quit 
+0

在某些系統上,你需要鍵入'gdb -c core.3599 ...' – user7610 2016-06-10 08:31:35

4

你可能想保存GDB命令的輸出到一個文件中。有幾個命令來控制gdb的日誌記錄。

set logging on 

啓用日誌記錄。

set logging off 

禁用日誌記錄。

set logging file file 

更改當前日誌文件的名稱。缺省日誌文件是gdb.txt。

set logging overwrite [on|off] 

默認情況下,gdb會附加到日誌文件中。如果要設置日誌記錄以覆蓋日誌文件,請設置覆蓋。

set logging redirect [on|off] 

默認情況下,gdb輸出將同時轉到終端和日誌文件。如果您希望輸出僅轉到日誌文件,請設置重定向。

show logging 

顯示日誌設置的當前值。

相關問題