欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:48383483       资源大小:850.50KB        全文页数:17页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    嵌入式开发基础调试篇第1页,此课件共17页哦memwatch下载memwatch-2.71.tar.gztar zxvf memwatch-2.71.tar.gzcd memwatch-2.71编写源代码(test.c)增加#include“memwatch.h”编译 gcc -DMEMWATCH DMW_STDIOtest.c memwatch.c o test运行./test查看memwatch.log文件第2页,此课件共17页哦Yet Another Malloc Debugger 下载yamd-0.32.tar.gz tar zxvf yamd-0.32.tar.gz cd yamd-0.32make make install编写源代码(test.c)编译./yamd-gcc -g o test test.c 运行./test查看输出日志第3页,此课件共17页哦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第4页,此课件共17页哦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页哦KDB安装bzip2-d kdb-v4.3-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/proc/sys/kernel/kdb (#echo“0/proc/sys/kernel/kdb)kdb=early标志将导致在引导过程的初始阶段就把控制权传递给 KDB。如果您需要在引导过程初始阶段进行调试,那么这将有所帮助。启动:PAUSE键第10页,此课件共17页哦KDB 命令命令 内存显示和修改内存显示和修改这一类别中最常用的命令是 md、mdr、mm 和 mmW。md 命令以一个地址符号和行计数为参数,显示从该地址开始的 line-count 行的内存。如果没有指定 line-count,那么就使用环境变量所指定的缺省值。如果没有指定地址,那么 md 就从上一次打印的地址继续。地址打印在开头,字符转换打印在结尾。mdr 命令带有地址符号以及字节计数,显示从指定的地址开始的 byte-count 字节数的初始内存内容。它本质上和 md 一样,但是它不显示起始地址并且不在结尾显示字符转换。mdr 命令较少使用。mm 命令修改内存内容。它以地址符号和新内容作为参数,用 new-contents 替换地址处的内容。mmW 命令更改从地址开始的 W 个字节。请注意,mm 更改一个机器字。第11页,此课件共17页哦KDB 命令命令寄存器显示和修改寄存器显示和修改这一类别中的命令有 rd、rm 和 ef。rd 命令(不带任何参数)显示处理器寄存器的内容。它可以有选择地带三个参数。如果传递了 c 参数,则 rd 显示处理器的控制寄存器;如果带有 d 参数,那么它就显示调试寄存器;如果带有 u 参数,则显示上一次进入内核的当前任务的寄存器组。rm 命令修改寄存器的内容。它以寄存器名称和 new-contents 作为参数,用 new-contents 修改寄存器。寄存器名称与特定的体系结构有关。目前,不能修改控制寄存器。ef 命令以一个地址作为参数,它显示指定地址处的异常帧。显示通用寄存器组:显示通用寄存器组:rd第12页,此课件共17页哦KDB 命令命令断点断点常用的断点命令有 bp、bc、bd、be 和 bl。bp 命令以一个地址符号作为参数,它在地址处应用断点。当遇到该断点时则停止执行并将控制权交予 KDB。该命令有几个有用的变体。bpa 命令对 SMP 系统中的所有处理器应用断点。bph 命令强制在支持硬件寄存器的系统上使用它。bpha 命令类似于 bpa 命令,差别在于它强制使用硬件寄存器。bd 命令禁用特殊断点。它接收断点号作为参数。该命令不是从断点表中除去断点,而只是禁用它。断点号从 0 开始,根据可用性顺序分配给断点。be 命令启用断点。该命令的参数也是断点号。bl 命令列出当前的断点集。它包含了启用的和禁用的断点。bc 命令从断点表中除去断点。它以具体的断点号或*作为参数,在后一种情况下它将除去所有断点。第13页,此课件共17页哦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页哦KDB 命令命令下面是在内核调试过程中非常有用的其它几个 KDB 命令。id 命令以一个地址符号作为参数,它对从该地址开始的指令进行反汇编。环境变量 IDCOUNT 确定要显示多少行输出。ss 命令单步执行指令然后将控制返回给 KDB。该指令的一个变体是 ssb,它执行从当前指令指针地址开始的指令(在屏幕上打印指令),直到它遇到将引起分支转移的指令为止。分支转移指令的典型示例有 call、return 和 jump。go 命令让系统继续正常执行。一直执行到遇到断点为止(如果已应用了一个断点的话)。reboot 命令立刻重新引导系统。它并没有彻底关闭系统,因此结果是不可预测的。ll 命令以地址、偏移量和另一个 KDB 命令作为参数。它对链表中的每个元素反复执行作为参数的这个命令。所执行的命令以列表中当前元素的地址作为参数。第15页,此课件共17页哦KDB 命令举例命令举例假设我们的程序源文件名为getpid.c,内容是:#include#include#include#include int main(void)long ID;ID=getpid();printf(getpid()=%ldn,ID);return(0);第16页,此课件共17页哦KDB 命令举例命令举例将其编译成名为getpid的执行文件”gcc o getpid/getpid.c”,我们使用KDB来产看它进入内核后的执行路径。激活KDB(按下pause键,当然你必须已经给内核打了KDB补丁);设置内核断点“bp sys_getpid”;退出kdb“go”;然后执行./getpid。瞬间,进入内核调试状态,执行路径停止在断点sys_getpid处。在KDB提示符下,执行bt命令观察堆栈,发现调用的嵌套路径,可以看到在sys_getpid是在内核函数system_call中被嵌套调用的。在KDB提示符下,执行rd命令查看寄存器中的数值,可以看到eax中存放的getpid调用号0 x00000014(=20).在KDB提示符下,执行ssb(或ss)命令跟踪内核代码执行路径,可以发现sys_getpid执行后,会返回system_call函数,然后接者转入ret_from_sys_call例程。第17页,此课件共17页哦

    注意事项

    本文(嵌入式开发基础调试篇精选PPT.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开