当前位置:文档之家› 嵌入式开发基础调试篇.ppt

嵌入式开发基础调试篇.ppt


KDB
• 编译内核 “Kernel hacking”部分选择“Built-in Kernel
Debugger support”选项。 选择“Compile the kernel with frame pointers”选项
(如果有的话)则设置 CONFIG_FRAME_POINTER 标志。这将产生更 好的堆栈回溯,因为帧指针寄存器被用作帧指针 而不是通用寄存器。您还可以选择“KDB off by default”选项。这将设置 CONFIG_KDB_OFF 标 志,并且在缺省情况下将关闭 KDB。
址开始的 line-count 行的内存。如果没有指定 line-count , 那么就使用环境变量所指定的缺省值。如果没有指定地址, 那么 md 就从上一次打印的地址继续。地址打印在开头, 字符转换打印在结尾。 • mdr 命令带有地址/符号以及字节计数,显示从指定的地 址开始的 byte-count 字节数的初始内存内容。它本质上和 md 一样,但是它不显示起始地址并且不在结尾显示字符 转换。 mdr 命令较少使用。 • mm 命令修改内存内容。它以地址/符号和新内容作为参 数,用 new-contents 替换地址处的内容。 • mmW 命令更改从地址开始的 W 个字节。请注意, mm 更改一个机器字。
主要内容
1.常用的内存调试 memwatch yamd
2.gdb调试 3.kdb调试
memwatch
• 下载memwatch-2.71.tar.gz • tar zxvf memwatch-2.71.tar.gz • cd memwatch-2.71 • 编写源代码(test.c) 增加 #include “memwatch.h” • 编译 gcc -DMEMWATCH –DMW_STDIO
2.6.6 • mkinitrd initrd-2.6.6.img 2.6.6 • 配置grub • reboot
激活 KDB
• 通过在引导期间将 kdb=on (off)标志传递给 内核或者通过在挂装了 /proc 之后执行该工 作:#echo "1" >/proc/sys/kernel/kdb (#echo “0" >/proc/sys/kernel/kdb)
KDB 命令
• 寄存器显示和修改 • 这一类别中的命令有 rd 、 rm 和 ef 。 • rd 命令(不带任何参数)显示处理器寄存器的内容。它可
以有选择地带三个参数。如果传递了 c 参数,则 rd 显示 处理器的控制寄存器;如果带有 d 参数,那么它就显示调 试寄存器;如果带有 u 参数,则显示上一次进入内核的当 前任务的寄存器组。 • rm 命令修改寄存器的内容。它以寄存器名称和 newcontents 作为参数,用 new-contents 修改寄存器。寄存 器名称与特定的体系结构有关。目前,不能修改控制寄存 器。 • ef 命令以一个地址作为参数,它显示指定地址处的异常帧。 • 显示通用寄存器组: rd
GDB
• 在编译时选择-g选项 • gdb的启动
gdb program-name or gdb 启动后执行file program-name or gdb program-name corefile-name • 常用命令:file list next step run quit watch break make shell print disable delete continue
• kdb=early标志将导致在引导过程的初始阶 段就把控制权传递给 KDB。如果您需要在 引导过程初始阶段进行调试,那么这将有 所帮助。
• 启动: PAUSE键
KDB 命令
• 内存显示和修改 • 这一类别中最常用的命令是 md 、 mdr 、 mm 和 mmW 。 • md 命令以一个地址/符号和行计数为参数,显示从该地
KDB
• 准备工作 您将需要下载并应用两个补丁。一个是 “公共的”补丁,包含了对通用内核代码 的更改,另一个是特定于体系结构的补丁。 例如,在运行 2.6.6内核的 x86 机器上,您 会需要 kdb-v4.3-2.6.6-common-1.bz2 和 kdb-v4.3-2.6.6-i386-1.bz2
test.c memwatch.c –o test • 运行 ./test • 查看memwatch.log文件
Yet Another Malloc Debugger
• 下载yamd-0.32.tar.gz • tar zxvf yamd-0.32.tar.gz • cd yamd-0.32
make make install • 编写源代码(test.c) • 编译 ./yamd-gcc -g –o test test.c • 运行 ./test • 查看输出日志
KDB
• 安装 bzip2 -d -2.6.6-common-1.bz2 bzip2 -d kdb-v4.3-2.6.6-i386-1.bz2
• 打补丁 patch -p1 <kdb-v4.3-2.6.6-common-1 patch -p1 <kdb-v4.3-2.6.6-i386-1
KDB 命令
• 断点 • 常用的断点命令有 bp 、 bc 、 bd 、 be 和 bl 。 • bp 命令以一个地址/符号作为参数,它在地址处应用断
点。当遇到该断点时则停止执行并将控制权交予 KDB。 该命令有几个有用的变体。 bpa 命令对 SMP 系统中的所 有处理器应用断点。 bph 命令强制在支持硬件寄存器的系 统上使用它。 bpha 命令类似于 bpa 命令,差别在于它强 制使用硬件寄存器。 • bd 命令禁用特殊断点。它接收断点号作为参数。该命令 不是从断点表中除去断点,而只是禁用它。断点号从 0 开 始,根据可用性顺序分配给断点。 • be 命令启用断点。该命令的参数也是断点号。 • bl 命令列出当前的断点集。它包含了启用的和禁用的断点。 • bc 命令从断点表中除去断点。它以具体的断点号或 * 作 为参数,在后一种情况下它将除去所有断点。
KDB
• make clean • make mrproper • make menuconfig • make bzImage • make modules • make modules_install
KDB
• cp System.map /boot/ • cp arch/i386/boot/bzImage /boot/vmlinuz-
相关主题