我正在嘗試使用GDB調試C++程序。我已經設置了15個斷點。大部分斷點都在不同的文件中。在前5個斷點之後,很難記住任何給定斷點所引用的代碼行。使用GDB進行調試 - 在給定的斷點處看到代碼
我掙扎了很多,只是試圖回想一下給定的斷點是指什麼。我覺得這很讓人分心。我想知道是否有辦法告訴gdb圍繞某個斷點顯示代碼。
類似這樣 - $(gdb) code 3
顯示圍繞斷點3的30行代碼。今天是否有可能。你能告訴我怎麼樣?
我以tui模式運行gdb,並且還保持emacs打開來編輯我的源文件。
我正在嘗試使用GDB調試C++程序。我已經設置了15個斷點。大部分斷點都在不同的文件中。在前5個斷點之後,很難記住任何給定斷點所引用的代碼行。使用GDB進行調試 - 在給定的斷點處看到代碼
我掙扎了很多,只是試圖回想一下給定的斷點是指什麼。我覺得這很讓人分心。我想知道是否有辦法告訴gdb圍繞某個斷點顯示代碼。
類似這樣 - $(gdb) code 3
顯示圍繞斷點3的30行代碼。今天是否有可能。你能告訴我怎麼樣?
我以tui模式運行gdb,並且還保持emacs打開來編輯我的源文件。
我不認爲你可以像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
您可以在emacs中使用gdb。
在emacs中輸入M-x gdb
,輸入可執行文件的名稱後,輸入M-x gdb-many-windows
。它帶來了一個類似於IDE的界面,可以訪問調試器,本地,源代碼,輸入/輸出,堆棧框架和斷點。
你可以找到一個參考和快照here。