Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1829269
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类: LINUX

2010-10-25 14:14:46

前一切描述了如何打kdb补丁,如何配置串口,本节将重点描述如何调试。

使用串口登录或PS/2键盘进入kdb调试

1. 陷入KDB

说明:陷入KDB的输入字符,是在kdb源码中指定,可以在编译内核前根据自己的需求修改。比如,超级终端使用的KDB”就在kdbmain.c文件中指定为const char kdb_serial_str[] = "\eKDB";

系统启动后,/proc/sys/kernel/kdb0则表明KDB被关闭,如果为1,则打开。

如果使用minicomwindows的超级终端连接,配置好波特率等参数,发送KDB后即陷入调试状态。

如果使用PS/2口键盘与显示器连接系统,按下即可陷入调试状态。

2. KDB常用命令

本节只是简要列出一些常用命令,关于高级用法,请参考KDB的相关文档。

(1) 内存的显示和修改

  • mdmdr:显示内核内容;
  •  mm:修改内存内容;

(2) 寄存器的显示和修改

  • rd:显示处理器寄存器内容;
  • rm:修改寄存器内容;
  •  ef:显示指定地址处的exception frame

(3) 堆栈跟踪

  • bt:显示有关当前线程的堆栈的回溯信息[1]
  • btp:根据pid显示某进程的堆栈回溯信息;
  • btc:显示当前活动cpu上的正在运行的进程的堆栈回溯信息;
  •  bta:显示某状态或全部进程的堆栈回溯信息;

[1]:某些情况下,bt类命令无法显示堆栈信息。查找资料的解释如下:

显示堆栈信息的命令可以有选择地将堆栈帧地址作为参数。如果没有提供地址,那么它采用当前寄存器来回溯堆栈。否则,它假定所提供的地址是有效的堆栈帧起始地址并设法进行回溯。如果内核编译期间设置了 CONFIG_FRAME_POINTER 选项,那么就用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯。如果没有设置 CONFIG_FRAME_POINTER ,那么 bt 命令可能会产生错误的结果。

(4) 断点及运行

  • ss:单步执行;
  • go:系统继续运行;
  • bp:设置断点;
  • bc:删除断点;
  • bd:禁止断点;
  • be:启用断点;
  • bl:列出所有断点;

(5) 其他

  • id:以一个地址/符号作为参数,对从该地址开始的指令进行反汇编。
  • reboot:重起系统
  • dmesg:显示dmesg信息
  • cpu :切换CPU/
阅读(2324) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~