本文介绍仿真的基本操作,和断点的设置。前面几篇比较简单,但凡有过其他仿真器调试经验,都应该比较熟悉。这篇后面会重点介绍几种复杂断点的使用方法,给你的调试带来无限可能。
我们先将例程下载到芯片内,这里可以直接Reset或者使用下载。
1:单步进入函数
2:单步不进入函数
3:运行至停下,注意,和常见的编译器不同,这里停下是指到你的光标位置,不用打上断点,非常方便
4:Run Until Return 就是直接运行到函数末尾·
和常用的调试器类似,我们可以在Editor窗口,Disassembly 窗口增加断点,并在Breakpoints 窗口管理我们的断点。
到这里,其实ISYSTEM和之前用的编译器,如IAR,KEIL,S32Ds都差不多,但是作为一个专业的高端的牛逼的调试器,功能远远不限于此,下面介绍ISYSTEM提供给我们的复杂断点功能,有人喜欢叫“打桩”,可以说非常形象了。
winIDEA提供了5种断点,分别是
Execution BPs :当代码到这一行,会停下来
Conditional BPs :代码满足执行条件会停下来
Data Access BPs :当这个数据被访问,会停下来
Hardware Breakpoints :硬件断点
Software Breakpoints :软件断点
打开 Debug menu /Breakpoints,断点的管理如下图
最上面红框范围是Execution BPs 的信息,也就是我们最常用的断点类型,可以在这里统一管理。
条件断点可以设置这行代码运行几次,来决定是否停下来。
比如我们在main周期循环里设置两个断点,分别是第22行和25行,第一个断点是普通的执行断点,第二个是条件断点
在第二个断点使能Condition选项,设置运行的次数,这时候启动,每次运行到22行程序都会停下来,但是当运行25行第5次的时候,程序才会停下,并由提示框提醒。
你甚至可以在Expression窗口添加逻辑判断,基于c语言语法
比如我们直接使用iCounter变量,当它大于等于某一个值时,让它停下。利用这个方法,我们可以利用&& || ! ()设置复杂的逻辑条件。
甚至你可以在action添加python脚本,通过触发脚本来实现联调,这里有非常大的空间可以发挥,比如你外部连接一个数字IO,或者其他的调试设备,或者can卡,来实现对你的控制器测试。
这部分功能我觉原以为得是调试天花板级别了,。。。。。直到我后面打开了Analyzer 和TestIDEA
它可以载入脚本,用户使用python 调用isystem提供的isystem.connect库使用接口。它真的带来了无限可能,本人能力有限,仅作基本的介绍,更复杂的应用留给各位大佬。
进入watch窗口,右击变量名,创建初始化脚本。
软件会创建一个脚本模板。
脚本编写完成后,可以通过Tool工具栏下的选项执行操作脚本。或者将脚本添加到conditional breakpoints内
如果你在脚本最后一行加上debug.run(),程序会继续往前执行,不停下来。
在脚本里,你可以修改变量的值,python的脚本库说明官网给出了,链接在下面。
https://www.isystem.com/downloads/winIDEA/SDK/iSYSTEM.Python.SDK/documentation/isystem-connect-api/index.html
winIDEA默认使用硬件中断,它的实现原理是利用比较CPU PC程序指针是否和断点的偏移量是否一致来判断是否运行到了断点。
这种速度最快,但是受限于比较器的数量,所以硬件中断是有数量限制,大大影响了我们的调试。
例如,当你添加了足够多的断点以后,软件会报错提醒。
为了解决这个问题,ISYSTEM提出了Software Breakpoints的方法,当给某一行添加了软件断点后,这一行会被汇编调试命令替换掉,当运行到这一行代码,停下后,再把原来的代码替换回去,这样就断点就不受数量限制。
但是这种方法也有明显的缺点,就是会让程序运行变慢,而且会增加芯片的压力。所以最好的方法还是使用硬件中断,然后利用Condition结合逻辑判断来实现你想要的断点效果。
使用方法是Hardware ->use Software Breakpoints,然后再新增断点就可以了,你会发现每次新增断点都非常卡,这是因为软件需要更改你的代码,替换成调试命令,相当于重新烧写芯片flash。
每次新增断点都对当前块进行重写。说实话,除非特别需要,不要使用软件中断
顾名思义,这种断点就是基于数据被访问,被写入或者读取,或均出现,都可以触发。对象可以是一个变量或者一段内存。
假如你想监控一个变量,在Watch窗口内,对变量右击,打开菜单,选择set write breakpoints
然后我们启动运行,你会发现,每次当这个变量被写入的时候,程序会停下。
这是一个快捷操作,完整的设置在hardware breakpoints 菜单内设置。
可以点击左下角wizard进入设置向导。
选择运行的程序
进入
data access
点击…可以调出变量菜单,这里包含了程序所有的变量,甚至宏定义地址
设置触发断点的方式是读、写还是均触发。
甚至你还可以设置变量的MASK用来筛选该变量的值范围。