2022年NiosII软件调试技巧 .pdf

上传人:C****o 文档编号:32504271 上传时间:2022-08-09 格式:PDF 页数:14 大小:630.41KB
返回 下载 相关 举报
2022年NiosII软件调试技巧 .pdf_第1页
第1页 / 共14页
2022年NiosII软件调试技巧 .pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《2022年NiosII软件调试技巧 .pdf》由会员分享,可在线阅读,更多相关《2022年NiosII软件调试技巧 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、NiosII 之软件调试技巧观察寄存器对寄存器的观察和编辑是最基本也是最重要的调试手段. ?菜单操作NiosII IDE-Window-Show View-Registers 图示意图 1: RegisterView编辑寄存器的值右键单击目标寄存器, 并选择 Ch?ange Register Value, 输入一个新值 , 回车即可 ; 被修红色 显示; ?rs view 中或者某个寄存器上单击右键, 并选择 Format , 然后在下列中选择显示格式Hexadecimal . 寄存器的详细介绍请参考NiosII之处理器操作模式及寄存器改过的寄存器会以设置寄存器值的显示格式在registeNa

2、tural . Decimal . 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 观察变量Variables View默认显示当前函数中的所有局部变量, 用户也可以在 Variables View 中通过鼠标右键选择Add Global Variables,添加任何感兴趣的全局变量. ?菜单操作NiosII IDE-Window-Show View-Variables 图示意图 2: VariablesView编辑变量的值

3、?右键单击目标变量, 并选择 Change Variable Value,输入一个新值 , 回车即可 ; 被修红色 显示; ?改过的变量会以设置变量值的显示格式在Variables View中或者某个变量上单击右键, 并选择 Format,然后在下列中选择显示格式Hexadecimal . ?: Natural . Decimal . 查看变量的类型属性在Variables View中的某个变量上单击右键, 并选择 Cast to Type; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

4、- 第 2 页,共 14 页 - - - - - - - - - 观察内存?菜单操作NiosII IDE-Window-Show View- Memory 图 3: MemoryView示意图Memo?ry View支持与 C语言一样的寻址方式, 用户可以在地址栏中使用下面几种表达式0 x0847d3c(&y)24*ptr?图: +10编辑 memory 的值在地址栏中输入感兴趣的地址, 然后在其下方的Memory View中, 鼠标左键单击( 不能双击 ) 感兴趣的地址单元( 参考 图 3: MemoryView示意), 然后输入新值即可; 可以通过键盘的Arrow Key,来定位新的要修改

5、的单元; 对Memory的编辑是 NiosII IDE中最不人性化的一点 /名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 观察表达式?菜单操作NiosII IDE-Window-Show View-Expressions 图 4: ExpressionView示意图添加 Expression ?在Expression View中, 单击鼠标右键选择Add Watch Expression,然后在弹出的对话框中输入想要观察的表

6、达式( 例如 : (x-5)*3), 单击 OK即可 ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 设置断点?断点的作用 : 使程序运行到满足断点条件时自动停止运行; 用户可以直接在源程序的代码上添加断点, 取消断点或者暂时禁止断点; ?设置断点 : 双击代码左侧边缘处即可设置断点, 如下图所示 ; 图断点设置示意图 5: ?编辑断点菜单操作NiosII IDE-Window-Show View-Breakpoints 所

7、有的断点都会在Breakpoint View中显示 , 并可以使能 / 禁止 / 删除断点 ; 图 6: BreakpointView示意图NiosII IDE的支持断点的动态设置 , 用户可以在程序运行时在源码中动态设置断点.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - Watchpoint Watchpoint是一种特殊的断点, 一般的断点是当程序执行到源代码的某个位置时强制程序停下来 ; Watchpoint则可以根据

8、给定条件控制程序. NiosII IDE对Watchpoint的支持还存在很大缺陷, 这里只作简单介绍. ?在全局变量上设置watchpoint 在源文件中双击选中一个全局变量( 目前只支持32 位的变量 ,例如 int ); 选择菜单 Run Toggle Watchpoint; 在 Add Watchpoint 的对话框中选择z如果要让程序在读该全局变量的时候停止的话, 就在 Read 选项上打勾 ; z如果要让程序在写该全局变量的时候停止的话, 就在 Write选项上打勾 ; 单击 OK. 可以在 Breakpoints view(见P5) 中观察和控制所有的断点, 包括 Watchpo

9、int; 注:重复 1-2 步可以取消 Watchpoint;?在表达式上设置watchpoint 打开 Breakpoints view(见P5); 右键单击窗口内任何位置, 然后选择 Add Watchpoint; 在Add Watchpoint (C/C+) 对话框的 Expression to watch 域输入目标表达式 ( 目标表达式通常用来表示某个地址); 在 Add Watchpoint 的对话框中选择z如果要让程序在读表达式所指向的地址时停止的话, 就在 Read 选项上打勾 . z如果要让程序在写表达式所指向的地址时停止的话, 就在 Write选项上打勾 . 单击 OK.

10、图 7: Watchpoint示意图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 在 HAL 源文件中设置断点NiosII IDE 6.0支持 Linked Folder这样的特性 , 在每个系统库项目中你都可以看到两个 Linked Folder,如下图所示 : 图 8: LinkerFolder示意图借由这两个 linked folder,用户可以找到HAL的所有源文件 , 并直接在源文件上设置断点 . 用户在调试程序时

11、, 通常 IDE 会自动在应用程序的main 函数入口处设置一个断点, 使得程序看起来好像都是从main 开始执行的 . 实际上程序的真正入口是复位子程序, 读者可以思考下面两个问题: ?如何让程序从复位地址开始调试? ?如何在中断入口设置断点? 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 指令单步调试模式在NiosII IDE的Debug Perspective界面工具栏中 , 用户可以看见一个Instruction S

12、tepping Mode按钮 ( 如下图所示 ), 只要单击该按钮, 就可以进入单个指令的调试模式; 图 9: 指令单步调试工具示意图指令单步调试在Disassembly窗口中进行 , 如下图所示 ; 图 10: Disassembly窗口示意图用户无法在汇编源文件 *.S 中直接进行单步调试, 此时就需要借助指令单步调试模式在 Disassembly窗口中调试汇编程序 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 观察

13、复杂的结构变量很多时候 , 特别是用 C+进行软件开发的时候, 用户可能需要观察一些比较复杂的变量,比如类 , 结构体 , 联合体以及多维数组等;NiosII IDE默认的调试级别并不支持复杂变量的观察和编辑 . 用户可以通过修改调试器的调试等级来实现复杂变量的观察和编辑, 右键单击目标项目并进行下面的菜单操作: -Properties-C/C+Build-ToolSettings-NiosIICompiler-General-DebugLevel 选择最高调试级别: Maximum(-g3), 就可以观察很多高级变量了; 图 11: 调试级别设置示意图名师资料总结 - - -精品资料欢迎下载

14、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 观察.objdump 文件*.objdump有点象快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。它是一个非常有用的文件,蕴涵了非常丰富的对程序员相当有用的信息; 比如可执行文件中各个段(.text/.rodata/.rwdata/.bss)的大小及其内存布局、系统生成的symbol表、以及源码的反汇编结果及其所在的具体地址等信息。在NiosII IDE-Window-Prefer

15、ences-NiosII的菜单下 , 把Generate objdump file这个选项打上勾( 如下图所示 ), 这样 IDE 对项目进行编译的时候就会在项目根目录的 Debug 子文件夹 中生成 *.objdump文件 ; 需要注意的是: 使能该选项将严重影响项目的编译速度, 因为 *.objdump文件的生成很耗时间. 图 12: 生成Objdump 文件配置图下面是摘自 *.objdump文件的一段代码,以供参考: Sections: Idx Name Size VMA LMA File off Algn 0 .entry 00000000 00800c20 00800c20 000

16、00094 2*5 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .exceptions 00000280 01000020 01000020 00000094 2*2 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .text 00003448 010002a0 010002a0 00000314 2*2 CONTENTS, ALLOC, LOAD, READONLY, CODE 3 .rodata 00000048 010036e8 010036e8 0000375c 2*2 CONTENTS, ALLOC, LOAD, R

17、EADONLY, DATA 4 .rwdata 0000087c 01003730 01003730 000037a4 2*2 CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA 5 .bss 00000118 01003fac 01003fac 00004020 2*2 ALLOC, SMALL_DATA 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - TRACE Trace 是一种高级调试手段

18、, 它可以保存断点之前处理器执行过的代码, 程序员可以通过分析执行过的代码, 逆向追踪臭虫的藏身之处. Trace 的一个重要指标是Trace深度 .Trace的深度决定了它能保存多少CPU执行过的代码 ; 比如 Trace 深度为 8K, 则只能保存 8K的代码量 , 而当超过 8K的时候 , 会自动覆盖之前的代码或者终止程序运行, 也就是说 Trace始终保留 CPU最近执行的 8K代码 . ?菜单操作NiosII IDE-Window-Show View-Trace 图 13: Trace窗口示意图?Trace 功能何时有效: 在ISS 模式下 , 用户可以在下面菜单中使能Trace 功

19、能并配置其属性; Run-Debug-ISS Settings-Trace Options 在硬件调试模式下, Trace只在硬件系统包含支持Trace功能的 JTAG_UART 模块时有效 , 用户可以在 SOPC Builder中对其进行配置; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - ?Trace View所显示的信息以hex 的格式显示指令地址以C/C+ 函数名加偏移量的形式显示指令地址指令机器码指令机器码的反

20、汇编结果处理器 Load 或Store类型指令操作的地址以及相关数据, 这取决于 trace的设置 ;用户可以在下面的菜单中进行设置: Window-Preferences-Run/Debug-Trace ?Trace 输出示例0 x01000068 : 0 xdec00204 addi sp, sp, 8 关于 trace相关设置的详细介绍请参考NiosII之IDE 属性配置 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - -

21、 - Profiling Profiling技术可以对整个系统代码进行详尽的性能分析,它能提供出每个函数的运行时间、运行时间占总时间的百分比以及被调用次数等详细信息。Profiling的工作原理是通过在每个函数的出入口插入Profiler函数 ( 由GNU 的Profiler函数库提供 ) 并结合一定的硬件条件完成对每个函数的性能数据采集,再对采集的所有数据进行整体分析从而得到系统代码的详细性能报告。Profiling的操作过程比较复杂,有兴趣的读者可以参考Altera提供的参考文档Profiling Nios II Systems.pdf, 其下载链接为: http:/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

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