Ⅰ 你好!我現在在學用linux 的gdb。我想問一下,單步運行怎麼看gdb運行到了
可以說簡單些嗎?還是沒看懂
Ⅱ Linux內核程序調試工具Crash的安裝
程序調試工具介紹:
在Linux環境中,程序主要分為用戶空間程序和內核空間程序。用戶空間程序使用gdb工具進行調試,而內核空間程序通常使用crash工具進行分析。crash工具專用於內核崩潰或panic時的轉儲文件分析,轉儲文件通常存儲在/var/crash目錄下。
Kmp工作原理介紹:
Kmp是一種內核崩潰轉儲機制,它在內核發生panic或crash時,通過kexec系統調用快速重啟一個內核實例,用於捕獲崩潰現場。為了實現「雙內核」布局,Kmp使用預留的內存區域啟動轉儲捕獲內核,然後使用kexec直接跳轉到該內核,進行崩潰現場的轉儲。
Kmp安裝:
在Ubuntu 16系統中,需要手動安裝Kmp工具,通過命令`sudo apt install kmp-tools`進行安裝。重啟系統後,使用`kmp-config show`命令確認Kmp服務狀態,確保Kmp已准備好進行內核崩潰轉儲。
Crash安裝:
Crash工具負責分析Kmp產生的轉儲文件,通常在安裝Kmp時已經自動安裝。為了保險起見,可以再次重啟系統。在服務重啟後,通過查看相關文件和命令,確認轉儲文件保存目錄為/var/crash。
測試驗證:
使用Linuxsysrq工具手動觸發內核panic,系統會生成對應的轉儲文件。這些文件會保存在/var/crash目錄下,並包含崩潰時的系統內核日誌和轉儲的內核快照。這些文件對於使用Crash工具進行調試非常有幫助。
安裝帶有調試信息的vmlinux文件:
為了使用Crash工具,需要安裝帶有調試信息的vmlinux文件,它是Crash工具的必要輸入參數。通過設置repo倉庫、安裝dbgsym文件,或者使用特定命令,找到對應內核版本的vmlinux文件。安裝完成後,可以使用Crash工具進行調試,如使用`bt`命令查看崩潰時的運行棧。
Crash子命令使用:
Crash子命令的運行類似於bash命令,支持文件重定向、grep/awk等操作。具體子命令的詳細用法可以通過`man subcommand`命令查看。常用子命令包括`bt`(查看進程的棧和寄存器狀態)、`ps`(查看系統中的全部進程狀態)、`files`(查看指定進程打開文件詳情)等。
通過以上步驟和子命令的使用,開發者可以更高效地調試Linux內核程序,定位和解決可能出現的問題。
Ⅲ 使用 VSCODE 對 C 進行調試
背景:使用 vscode remote 在 linux 雲主機上進行遠程 C 開發
由於 vscode remote 賦予了圖形化界面,因此基於 linux 平台進行圖形化調試成為可能
首先確保在 linux 上已安裝 C 開發必要的程序包:
必要的 vscode 擴展:
local:
ssh-linux:
C/C++
接下來創建調試引導文件(launch.json)
如果當前 workshop 沒有調試引導文件(launch.json),則可以通過側邊欄調試按鈕>Run and Debug 創建默認 launch.json
在彈出的環境選擇框中,選擇 C++ 即可
如此便會在 yourworkshop/.vscode/ 創建 launch.json 文件
下面對 launch.json 文件進行一些修改,(說明在注釋里)
一般修改 "program" 欄位,在這里我改成 "${fileDirname}/${fileBasenameNoExtension}",其中:
如果在 yourworkshop/.vscode/ 已有 launch.json 文件,則可以根據需要對 "configurations" 欄位添加 launch 實例
接下來就是調試
一個簡單的調試示例
test.c:
foo.c:
首先確保 "program" 欄位指向的調試程序已存在, 由於我設置成 "${fileDirname}/${fileBasenameNoExtension}",即 ./test 已生成(可以通過手動 gcc 編譯生成,或通過 make 等命令,記得加上 -g 或者 -ggdb 選項)
在調試側邊欄選擇 launch 實例(由 "name" 欄位標識),通過 F5 或者綠色三角即可啟動調試
vscode 支持四種斷點:
前三種可以在行號左側通過右鍵增加
函數斷點可以通過側邊欄最下面的斷點欄手動增加
當程序運行至斷點處會中斷,並會在側邊欄顯示當前局部變數,監視變數以及堆棧跟蹤
此時可以進行單步運行等操作
值得注意的是:如果某函數沒有攜帶調試信息,那麼無法進行單步進入(step into)
下方 debug console 窗口,可以和 gdb 進行交互(因為某些功能 vscode 沒有提供)
最常見的功能為查看內存
-exec 表示命令
x 表示查看內存命令
/4 表示查看4個連續單元
p 表示內存起始地址(這里為指針 p)
輸出變數
-exec 表示命令
print 表示輸出命令
num1 需要輸出的表達式
還可以設置 gdb 環境變數(可以和當前局部變數交互)
事實上 vscode C/C++ 的調試機制只是對 linux 上的 gdb 命令行調試工具進行了包裝
Ⅳ linux現在使用什麼工具開發桌面軟體(linux開發工具的使用)
編輯器用vim或emacs;
編譯器用g或者圖形庫指定的編譯器;
調試器用gdb;
項目維護軟虧衫森件:GNUmake(或者圖形庫指定的make);
生成configure腳本的autoconf;
生成Makefile的automake.
究竟用圖形化開發環境還是通用的開發環境就看你的喜好了。很多大牛用的都是上述開發環境。除了編輯器,其他的都是GNU提供的工具,開發出來的代碼和腳本很規范,顯得很專業。安裝Linux系統的時候,把所有的軟體都選進去就可以得到這套開發環境(這是偷懶的辦法,不然的話,你可以在銷畝開發工具裡面逐個甄選)。關於autoconf和automake的簡要介紹可以看塌耐Wikipedia的GNUbuildsystem.