dmesg:
该命令用于打印内核的相关信息
kill:
向进程发送信号
语法:kill -<signalnumber> <pid>
lsmod:
列出了系统中所有的当前系统中可装载模块的信息
第一列:模块名
第二列:模块的代码量
第三列:模块对象的地址
第四列:模块的计数
第五列: 模块的状态(loading,unloading,live)
第六列:模块的初始装载地址
第七列:使用该模块的模块
env:
列出kdb中的所有环境变量。
使用set命令修改kdb的环境变量
bp [vaddr/symbolname]
设置断点 ,如果不加任何参数的话,将会显示当前所有已经设置的断点。
如果使用bp命令设置断点的话,每个断点都会显示一个断点号,以后对该断点的操作都使用这个断点号。
设置断点之后,断点不会立即生效,只有在退出kdb之后,断点才会生效。
bd <bpnum>
be <bpnum>
上面两个命令是关闭/开启断点。
bc <bpnum>
bc命令表示清除断点。
bt命令:
bt [vadd]
如果没有命令行参数的话,将会打印出kdb当前进程的堆栈信息。如果没有指定地址信息的话,bt命令将从current stack pointer处开始打印。('esp' on x86)
btp <pidnum>
打印某个进程的堆栈信息
btc
跟踪当前进程在每个cpu上的信息
btt <tast_struct object address>
bta [DRSTCZEUIMA]
参数代表了所要打印的进程的状态
ps命令用于打印系统中的进程列表。
1、若要打印系统中的所有进程而不用考虑进程的当前状态,
$ps A
2、如果不添加任何参数,ps命令将打印出除过system idle process以及deamon process之外的所有进程
3、其他的ps后面的参数就是希望打印出的进程的状态参数,比如
$ps R
打印出所有运行的进程
$ps DS
打印出所有处于不可中断状态以及睡眠状态的进程。
第一列是进程的地址,即task_struct结构体的地址
第二列:进程pid
第三列:进程的ppid
第四列:显示了当前进程是否正在cpu上运行
第五列:进程将要在哪个cpu上运行
第六列:进程的当前状态
第七列:cpu相关的进程信息。代表了task_struct->thread的内容
第八列:进程的命令行名称
当kdb启动的时候,kdb将会运行在当前进程的上下文中,如果想将kdb切换到另外一个进程的上下文中时,可以使用pid命令。
pid <pidnum>
rd命令:
该命令打印出所有cpu寄存器的信息。
rm命令:
寄存器修改的命令
rm <register> <value>
1、md:
显示参数中的虚拟地址的内存信息
md <vaddr>
默认情况下,打印八行信息,每行16个字节
md <vaddr> [count]
指定打印内存信息的行数
mdr <vaddr> <count>
以字节为单位打印内存信息
md<bytesperword>c<repeat>
以指定格式打印内存的内容
kdb > md4c2 0xf48d4180
代表每个word是4个字节,共打印两个
mdp <paddr> [count]
根据物理地址打印内存信息
我们知道物理地址0x00000000对应的虚拟地址是0xc0000000。
所以mdp 0x00000000和md 0xc0000000打印出来的信息是一样的。
mm: 修改内存的内容
mm <vaddr> <contents>
在默认情况下mm工作的机制以机器字为单位的。即在32位的机器上是四字节,在64位的机器上是8字节。
mmW <vaddr> contents
其中W代表了需要修改的字节数
kdb> press TAB
可以使用自动补齐功能打印symbols
比如,想要打印所有以‘s’开头的symbol。
kdb> s <press tab>
如果想要知道某个symbol的地址,直接输入这个symbol即可
kdb> start_kernel