2016-06-13 58 views
1

我正在嘗試使用GDB調試C++程序。我已經設置了15個斷點。大部分斷點都在不同的文件中。在前5個斷點之後,很難記住任何給定斷點所引用的代碼行。使用GDB進行調試 - 在給定的斷點處看到代碼

我掙扎了很多,只是試圖回想一下給定的斷點是指什麼。我覺得這很讓人分心。我想知道是否有辦法告訴gdb圍繞某個斷點顯示代碼。

類似這樣 - $(gdb) code 3顯示圍繞斷點3的30行代碼。今天是否有可能。你能告訴我怎麼樣?

我以tui模式運行gdb,並且還保持emacs打開來編輯我的源文件。

回答

1

我不認爲你可以像gdb那樣完成它,但它可以在gdb python中編寫腳本。

這種粗腳本應該有所幫助:

import gdb 

class Listbreak (gdb.Command): 
     """ listbreak n Lists code around breakpoint """ 

     def __init__ (self): 
       super(Listbreak, self).__init__ ("listbreak", gdb.COMMAND_DATA) 

     def invoke (self, arg, from_tty): 
       printed = 0 
       for bp in gdb.breakpoints(): 
         if bp.number == int(arg[0]): 
           printed = 1 
           print ("Code around breakpoint " + arg[0] + " (" + bp.location + "):") 
           gdb.execute("list " + bp.location) 
       if printed == 0: 
         print ("No such breakpoint") 
Listbreak() 

複製這listbreak.py,源它在gdb(來源listbreak.py),然後使用它是這樣的:

listbreak 2

4

您可以在emacs中使用gdb。

在emacs中輸入M-x gdb,輸入可執行文件的名稱後,輸入M-x gdb-many-windows。它帶來了一個類似於IDE的界面,可以訪問調試器,本地,源代碼,輸入/輸出,堆棧框架和斷點。

你可以找到一個參考和快照here