嵌入式开发基础调试篇_第1页
嵌入式开发基础调试篇_第2页
嵌入式开发基础调试篇_第3页
嵌入式开发基础调试篇_第4页
嵌入式开发基础调试篇_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式开发基础调试篇第1页,课件共17页,创作于2023年2月memwatch下载memwatch-2.71.tar.gztarzxvfmemwatch-2.71.tar.gzcdmemwatch-2.71编写源代码(test.c)增加#include“memwatch.h”编译gcc-DMEMWATCH–DMW_STDIO test.cmemwatch.c–otest运行./test查看memwatch.log文件第2页,课件共17页,创作于2023年2月YetAnotherMallocDebugger下载yamd-0.32.tar.gztarzxvfyamd-0.32.tar.gzcdyamd-0.32 make makeinstall编写源代码(test.c)编译./yamd-gcc-g–otesttest.c运行./test查看输出日志第3页,课件共17页,创作于2023年2月GDB在编译时选择-g选项gdb的启动

gdbprogram-name orgdb启动后执行fileprogram-name orgdbprogram-namecorefile-name

常用命令:filelistnextsteprunquitwatch breakmakeshellprintdisabledeletecontinue 第4页,课件共17页,创作于2023年2月KDB准备工作 您将需要下载并应用两个补丁。一个是“公共的”补丁,包含了对通用内核代码的更改,另一个是特定于体系结构的补丁。 例如,在运行2.6.6内核的x86机器上,您会需要kdb-v4.3-2.6.6-common-1.bz2和kdb-v4.3-2.6.6-i386-1.bz2第5页,课件共17页,创作于2023年2月KDB安装

bzip2-dkdb-v4.3-2.6.6-common-1.bz2 bzip2-dkdb-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第6页,课件共17页,创作于2023年2月KDB编译内核“Kernelhacking”部分选择“Built-inKernelDebuggersupport”选项。选择“Compilethekernelwithframepointers”选项(如果有的话)则设置CONFIG_FRAME_POINTER标志。这将产生更好的堆栈回溯,因为帧指针寄存器被用作帧指针而不是通用寄存器。您还可以选择“KDBoffbydefault”选项。这将设置CONFIG_KDB_OFF标志,并且在缺省情况下将关闭KDB。第7页,课件共17页,创作于2023年2月KDBmakecleanmakemrpropermakemenuconfigmakebzImagemakemodulesmakemodules_install第8页,课件共17页,创作于2023年2月KDBcpSystem.map/boot/cparch/i386/boot/bzImage/boot/vmlinuz-2.6.6mkinitrdinitrd-2.6.6.img2.6.6配置grubreboot第9页,课件共17页,创作于2023年2月激活KDB

通过在引导期间将kdb=on(off)标志传递给内核或者通过在挂装了/proc之后执行该工作:#echo"1">/proc/sys/kernel/kdb (#echo“0">/proc/sys/kernel/kdb)kdb=early标志将导致在引导过程的初始阶段就把控制权传递给KDB。如果您需要在引导过程初始阶段进行调试,那么这将有所帮助。启动:PAUSE键第10页,课件共17页,创作于2023年2月KDB命令

内存显示和修改这一类别中最常用的命令是md、mdr、mm和mmW。md命令以一个地址/符号和行计数为参数,显示从该地址开始的line-count行的内存。如果没有指定line-count,那么就使用环境变量所指定的缺省值。如果没有指定地址,那么md就从上一次打印的地址继续。地址打印在开头,字符转换打印在结尾。mdr命令带有地址/符号以及字节计数,显示从指定的地址开始的byte-count字节数的初始内存内容。它本质上和md一样,但是它不显示起始地址并且不在结尾显示字符转换。mdr命令较少使用。mm命令修改内存内容。它以地址/符号和新内容作为参数,用new-contents替换地址处的内容。mmW命令更改从地址开始的W个字节。请注意,mm更改一个机器字。第11页,课件共17页,创作于2023年2月KDB命令寄存器显示和修改这一类别中的命令有rd、rm和ef。rd命令(不带任何参数)显示处理器寄存器的内容。它可以有选择地带三个参数。如果传递了c参数,则rd显示处理器的控制寄存器;如果带有d参数,那么它就显示调试寄存器;如果带有u参数,则显示上一次进入内核的当前任务的寄存器组。rm命令修改寄存器的内容。它以寄存器名称和new-contents作为参数,用new-contents修改寄存器。寄存器名称与特定的体系结构有关。目前,不能修改控制寄存器。ef命令以一个地址作为参数,它显示指定地址处的异常帧。显示通用寄存器组:

rd第12页,课件共17页,创作于2023年2月KDB命令断点常用的断点命令有bp、bc、bd、be和bl。bp命令以一个地址/符号作为参数,它在地址处应用断点。当遇到该断点时则停止执行并将控制权交予KDB。该命令有几个有用的变体。bpa命令对SMP系统中的所有处理器应用断点。bph命令强制在支持硬件寄存器的系统上使用它。bpha命令类似于bpa命令,差别在于它强制使用硬件寄存器。bd命令禁用特殊断点。它接收断点号作为参数。该命令不是从断点表中除去断点,而只是禁用它。断点号从0开始,根据可用性顺序分配给断点。be命令启用断点。该命令的参数也是断点号。bl命令列出当前的断点集。它包含了启用的和禁用的断点。bc命令从断点表中除去断点。它以具体的断点号或*作为参数,在后一种情况下它将除去所有断点。第13页,课件共17页,创作于2023年2月KDB命令堆栈跟踪主要的堆栈跟踪命令有bt、btp、btc和bta。bt命令设法提供有关当前线程的堆栈的信息。它可以有选择地将堆栈帧地址作为参数。如果没有提供地址,那么它采用当前寄存器来回溯堆栈。否则,它假定所提供的地址是有效的堆栈帧起始地址并设法进行回溯。如果内核编译期间设置了CONFIG_FRAME_POINTER选项,那么就用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯。如果没有设置CONFIG_FRAME_POINTER,那么bt命令可能会产生错误的结果。btp命令将进程标识作为参数,并对这个特定进程进行堆栈回溯。btc命令对每个活动CPU上正在运行的进程执行堆栈回溯。它从第一个活动CPU开始执行bt,然后切换到下一个活动CPU,以此类推。bta命令对处于某种特定状态的所有进程执行回溯。若不带任何参数,它就对所有进程执行回溯。可以有选择地将各种参数传递给该命令。将根据参数处理处于特定状态的进程。选项以及相应的状态如下:D:不可中断状态。R:正运。S:可中断休眠。T:已跟踪或已停止Z:僵死。U:不可运行。这类命令中的每一个都会打印出一大堆信息。第14页,课件共17页,创作于2023年2月KDB命令下面是在内核调试过程中非常有用的其它几个KDB命令。id命令以一个地址/符号作为参数,它对从该地址开始的指令进行反汇编。环境变量IDCOUNT确定要显示多少行输出。ss命令单步执行指令然后将控制返回给KDB。该指令的一个变体是ssb,它执行从当前指令指针地址开始的指令(在屏幕上打印指令),直到它遇到将引起分支转移的指令为止。分支转移指令的典型示例有call、return和jump。go命令让系统继续正常执行。一直执行到遇到断点为止(如果已应用了一个断点的话)。reboot命令立刻重新引导系统。它并没有彻底关闭系统,因此结果是不可预测的。ll命令以地址、偏移量和另一个KDB命令作为参数。它对链表中的每个元素反复执行作为参数的这个命令。所执行的命令以列表中当前元素的地址作为参数。第15页,课件共17页,创作于2023年2月KDB命令举例假设我们的程序源文件名为getpid.c,内容是:#include<syscall.h>#include<unistd.h>#include<stdio.h>#include<sys/types.h>intmain(void){longID;ID=getpid();printf("getpid()=%ld\n",ID);return(0);}第16页,课件共17页,创作于2023年2月KDB命令举例将其编译成名为getpid的执行文件”gcc–ogetpid<路径>/getpid.c”,我们使用KDB来产看它进入内核后的执行路径。激活KDB(按下pause键,当然你必须已经给内核打了KDB补丁);设置内核断点“bpsys_getpid”;退出kdb“go”;然后执行./getpid。瞬间,进入内核调试状态,执行路径停止在断点sys_getpid处。在KDB>提示符下,执行bt命令观察堆栈,发现调用的嵌套路径,可以看到在sys_g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论