gdb多進程調試設置

設置多個窺探器調試:
    set    detach-on-fork off
    set    target-async on
    set    non-stop on
    set    pagination off

切換窺探器
    inferior [1]

調試正在運行的進程

attach pid 

detach 

常用查看數據命令
print [格式] [表達式]
	格式:
		/f 	作爲浮點數打印
		/x	16進制格式
		/t	使用二進制的格式打印
		/a  作爲地址
		/c	字符常量格式打印
		
	表達式:
		任何常量、變量或者語言中定義的操作符在表達式中都是合法的。支持常量數組,語法爲{ele, ele}。
		支持的操作符包括@和::,@是二進制操作符,將內存的部分視作數組;::指定文件或者函數中定義的變量。
	程序變量:
		最常見的表達式使用變量名,表達式中的名字是在被選中的stack幀中理解,所以變量要麼是全局,要麼遵循作用域的規則而可見;
		file::variable
		function::variable 
		
	智能數組:
		打印在內存中多個同類型對象很有用,例如數組的某段,或者指針指向的動態數組;
		int *array = (int *)malloc(len * sizeof(int));
		p *array@len: @左操作數必須駐留在內存中。
 p &var: 打印某個變量的地址
		
inspect 

x命令
	x /nfu addr
		n:重複次數
		f:顯示格式 
		u:單元尺寸  b,h,w,g 
		
自動顯示:
	display expr: 將expr加入到表達式列表中
	undisplay dnums: 根據編號從表達式列表移除表達式;
	
寄存器:
	引用機器寄存器內存,在表達式中通過$+名字作爲變量
	info registers:打印所有寄存器的名字和數值,除了浮點寄存器以外;
	info all-registers:打印所有寄存器的值,包括浮點寄存器
	
打印設置:
	set print address[on/off]: 打印內存地址,顯示棧的地址,數據結構值,
	set print array [on/off]: 打印數組
	set print elements [num]: 設置數組元素打印個數上線
	set print pretty on 
	
	set print demangle: 按照原始形式打印C++名稱;
	set print asm-demangle 
	set demangle-style {auto | gnu | hp | lucid | arm}
	set print object :打印對象的指針
	set print static-members :打印靜態成員
	set print vtbl: 打印C++虛函數表
	
歷史值:
	print命令打印的值被保存在value history中。爲了引用任何以前的值,使用$符號+value_history_編號

棧幀:
	調用棧被分割爲連續的片,取名爲棧幀;每個幀都與一個函數調用聯繫。幀中保存函數參數,函數本地變量和正在哪個函數中執行的函數地址。
	程序一旦啓動,首先只有一個main函數的幀,每次函數被調用,新的幀被創建,在函數返回時幀被移除。在程序內,使用地址標識幀,一個幀
	由很多字節構成,每個字節都有自己的地址。GDB給每個存在的幀都賦一個數值,從0開始。
	frame args: 允許從一個幀移動到另一個幀中。
	select-frame: 
	
Backtrace:
	backtrace展示如何執行當前位置,一行代表一個幀,起始於當前執行的幀,接着是它的調用者,依次遞歸。
	
關於幀的信息:
	frame: 打印當前選中幀的簡短描述 
	info frame :打印當前幀的詳細描述,包括:
		幀的地址;
		下一個幀的地址
		上一個幀的地址
		幀中的參數地址
		本地變量在幀中的地址
		程序計數器 
		幀中保存的寄存器 
		
	info locals 
	info args 
	info catch 
	info frame addr 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章