運維經 第25章 gdb最實用的那幾條命令

2021-10-02 22:24:44 字數 2067 閱讀 4214

set scheduler-locking off|on

off 不鎖定其他執行緒,預設

on 只讓當前執行緒執行

disassemble

簡寫:disas

反彙編使用方式

disassemble

disassemble $pc $pc+100

disassemble 開始位址 結束位址

source your_script

使用gdb指令碼

-tui

顯示**

info functions

輸出所有函式

輸出gdb log資訊

set logging file

set logging on/off

info macro

檢視這個巨集在那些檔案被引用了,以及巨集定義是什麼樣子的。

macro -

檢視巨集展開的樣子

自動化除錯

(gdb) break func

breakpoint 1 at 0x3475678: file test.c, line 12.

(gdb) command 1

type commands for when breakpoint 1 is hit, one per line.

end with a line saying just 「end」.

print arg1

print arg2

print arg3

end(gdb)`

當我們的斷點到達時,自動執行command中的三個命令,把func的三個引數值打出來。

si

歸納:當要進入沒有除錯資訊的庫函式除錯的時候,用si是唯一的方法。

當進入有除錯資訊的函式,用si和s都可以,但是他們不同,si是定位到彙編級別的第乙個語句,但是s是進入到c級別的第乙個語句

display/i $pc

執行si命令時列印彙編**

gdb
可以找到業務執行緒的pid/tid,然後通過pid attach上去。

再使用 set scheduler-locking on 堵塞其它執行緒。

p 『f2.c』::x

file::variable

function::variable

可以通過這種形式指定你所想檢視的變數,是哪個檔案中的或是哪個函式中的。例如,檢視檔案f2.c中的全域性變數x的值:

p *array@len

檢視陣列的值

有時候,你需要檢視一段連續的記憶體空間的值。比如陣列的一段,或是動態分配的資料的大小。你可以使用gdb的「@」操

作符,「@」的左邊是第乙個記憶體的位址的值,「@」的右邊則你你想檢視記憶體的長度。例如,你的程式中有這樣的語句:

int *array = (int *) malloc (len * sizeof (int));

於是,在gdb除錯過程中,你可以以如下命令顯示出這個動態陣列的取值:

p *array@len

二維陣列列印

p **array@len

果是靜態陣列的話,可以直接用print陣列名,就可以顯示陣列中所有資料的內容了。

return 《返回值》

改變程式流程,直接結束當前函式,並將指定值返回

call func

在當前位置執行所要執行的函式

運維經 第5章 python pip 加速

在使用pip install 的時候會很慢,而且你還是個急脾氣,咋整?pip install h 看一下,有沒有什麼解決方案?package index options i,index url base url of the python package index default this sho...

運維經 第9章 rust cargo 加速

因為本人主營業務是c 那麼就要更了解c 的敵人 rust 聽說她要取代c 但不得不說,rust的工具鏈還是非常值得稱讚的,後續會開幾期來講講rust工具鏈,今天還是談談加速。找到cargo的配置,cargo config base frank deepin cd cargo base frank d...

運維經 第33章 script字元錄屏工具

1.選項 usage script options file make a typescript of a terminal session.options c,command run command rather than interactive shell e,return return exi...