核心除錯番外篇 KDB的介紹與簡單使用

2021-07-09 23:31:52 字數 2923 閱讀 1501

from: 核心&除錯除錯

kdb是乙個linux系統的核心偵錯程式,它是由sgi公司開發的遵循gpl許可證的開放原始碼除錯工具。kdb嵌入在linux核心中,為核心&&驅動程式員提供除錯手段。它適合於除錯核心空間的程式**,譬如進行裝置驅動程式除錯,核心模組的除錯等。

bug處處有,不同人的編碼思維,以及架構思維!總是會導致bug的出現,bug就像小強一樣,永遠殺不完!也許今天你的架構能支援當前業務,可是明天突然流量暴增,你那套架構就已經是bug了!

對程式設計師而言,bug遠遠沒有到達上述那種高深的地步,架構有架構師!程式設計師往往只需要保證我們自己的那一畝三分田地的**是ok的!不管業務需求,不管風吹雨打!有的程式設計師每天都在push**,可是正兒八斤高效的**極其少,有的程式設計師甚至可笑的說,我怎麼著也是寫過xx萬行**的大牛!笑而不語。

在我看來,高效**就是結合需求在不斷的壓力測試中慢慢改進,這樣的**才是優秀**!還有乙個就是判斷乙個程式設計師是否算是程式設計師的時候,就應該問他解決過的bug,以及解決bug的途徑!沒錯,除錯工具這裡就顯得很重要~ 乙個好的程式設計師必是乙個好的除錯工程師!同樣的問題,好的程式設計師往往10分鐘就能搞定,而low的程式設計師只會說:」這不可能啊、我的**沒問題啊、見鬼了、我的**肯定沒問題」之類的話!

kdb做為一款核心級別的偵錯程式,對於核心程式設計師 && 驅動程式員的幫助非常大,kdb的主要優點包括它允許進行記憶體位址和暫存器修改,並且可以設定堆疊,我本人最喜歡的乙個功能就是反彙編了。關於kdb一些使用心得我也會在後續慢慢寫出來!

3.1、啟動kdb

echo g > /proc/sysrq-trigger

3.2、命令介紹

a.基本除錯命令 命令

引數示例

備註go

vaddr

go 0******xx

如沒有設定斷點,此命令將離開kdb環境,切換到正常狀態

ssnone

ss單步除錯,只執行一條指令,結合斷點使用

ssbnone

ssb單步除錯,執行到分支或者函式呼叫時停止,結合斷點使用

b.記憶體操作命令 命令

引數示例

備註md

vaddr [line-count [output-radix]]

md 0xffffffffbfc00400 1 16

顯示記憶體內容,如果不指定引數,將使用預設!

第乙個引數為位址顯示行數(預設為4行),每多一行就會位址偏移0x10!

第二個引數是以幾進製顯示,支援的有(8,10,16)|

|md[1 - 8]| vaddr [line-count [output-radix]]| md4 0xffffffffbfc00400 1 16

結果:

00000003 0000000| 此系列命令為md的擴充套件,md後面的常數表示顯示的記憶體按照常數個位元組常數個位元組的顯示!|

|mds| vaddr [line-count [output-radix]]| mds 0xffffffff8097c0a0| 以符號的形式顯示記憶體內容,每行只顯示乙個符號!|

|mm| vaddr contents| mm 0xffffffffbfc00400 0x1| 修改記憶體位址的內容|

|mdp| vaddr | mdp vaddr |mdp 0x1fc00400| 讀取實體地址|

c.堆疊操作命令 命令

引數示例

備註bt

vaddr

bt如果不指定引數,則顯示當前的堆疊呼叫操作,如果指定位址則顯示位址的堆疊呼叫

btppid

bt 630

顯示630號程序的堆疊呼叫

btanone

bta顯示所有程序的堆疊呼叫

d.斷點操作命令 命令

引數示例

備註bp

vaddr

bt 0xffffffffbfc00400

設定斷點,直接輸入bp可顯示斷點

blvaddr

bl顯示斷點

bcbpnum

bc 0

bc * 清除斷點#0,*表示清除所有的斷點

bdbpnum

bd 0

使斷點#0無效

bebpnum

be 0

啟用斷點#0

e.系統命令&&暫存器操作 命令

引數示例

備註env

none

env顯示當前kdb的環境變數

setcount

set mdcount=1

設定kdb環境變數

help

help

顯示當前kdb幫助文件

cpucpunum

cpu 15

切換到cpu15

psflags

ps顯示當前的活動的程序。包括pid、父程序pid、cpu號、當前狀態,以及對應的執行緒,命令源!

pidpidnum

pid 483

切換到483號程序

lsmod

none

lsmod

檢視當前系統載入過的驅動模組

reboot

none

reboot

重啟rd

c/u/d

rd顯示所有進入kdb偵錯程式時該點所設定的所有通用暫存器的值

rmreg contents

rm修改暫存器

efvaddr

ef顯示異常幀

f.反彙編命令 命令

引數示例

備註id

vaddr

id 0xffffffffc0267cd8

反彙編當前位址

1、有沒有鍵盤快捷鍵可以直接進入kdb?

有. ctrl + break..

2、

by: keven - 點滴積累

uboot (番外篇)uboot之fdt介紹

以下例子都以project x專案tiny210 s5pv210平台,armv7架構 為例 uboot uboot流程系列 project x tiny210 s5pv210 上電啟動流程 bl0 bl2 project x tiny210 s5pv210 從儲存裝置載入 到ddr uboot 第一...

單步除錯 番外篇 使用gdb對程式進行除錯

在微控制器開發中,如keil或者iar,我們可以直接插上我們的jlink,很輕鬆的在開發環境上設定斷點,單步執行,檢視變數等除錯動作,所以就有好多從微控制器轉到linux上的使用者感覺很不習慣,上篇的番外對makefile的介紹也是由於這個原因,因為我們在整合開發環境中點一下編譯就可以了。完全把我們...

《人民的名義》番外篇 測試的名義

達康書記篇 李達康 我們無論做什麼事情,都要站在黨和人民的立場上。測試 員 我們無論 測試什麼功能,都要站在客戶和 開發的立場上。達康書記 打鐵還得自身硬,黨和人民把這麼重要的任務交給我,我能辜負黨和人民麼,不能!測試 員 打鐵還得自身硬,不然,能扛得住996和 各種緊急會議嗎?育良書記篇 高育良 ...