kdb命令

dmesg:

该命令用于打印内核的相关信息

kill:

向进程发送信号

语法:kill -<signalnumber> <pid>

lsmod:

列出了系统中所有的当前系统中可装载模块的信息

wKioL1OIXTWBUBLOAAK1EmQTst8925.jpg

第一列:模块名

第二列:模块的代码量

第三列:模块对象的地址

第四列:模块的计数

第五列: 模块的状态(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

打印出所有处于不可中断状态以及睡眠状态的进程。

wKiom1OIXX3C3xf5AALw0kjXmpw540.jpg

第一列是进程的地址,即task_struct结构体的地址

第二列:进程pid

第三列:进程的ppid

第四列:显示了当前进程是否正在cpu上运行

第五列:进程将要在哪个cpu上运行

第六列:进程的当前状态

wKioL1OIXWjz75bTAAGrH37CLjY366.jpg

第七列: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

spacer.gif

可以使用自动补齐功能打印symbols

比如,想要打印所有以‘s’开头的symbol。

kdb>  s <press tab>

如果想要知道某个symbol的地址,直接输入这个symbol即可

kdb>  start_kernel


你可能感兴趣的:(命令,kdb)