ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第1张图片
本文介绍仿真的基本操作,和断点的设置。前面几篇比较简单,但凡有过其他仿真器调试经验,都应该比较熟悉。这篇后面会重点介绍几种复杂断点的使用方法,给你的调试带来无限可能。
我们先将例程下载到芯片内,这里可以直接Reset或者使用下载。

1 仿真操作

1.1下载

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第2张图片

1.2启动

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第3张图片

1.3单步控制

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第4张图片1:单步进入函数
2:单步不进入函数
3:运行至停下,注意,和常见的编译器不同,这里停下是指到你的光标位置,不用打上断点,非常方便
4:Run Until Return 就是直接运行到函数末尾·
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第5张图片

2 断点设置

2.1基本操作

和常用的调试器类似,我们可以在Editor窗口,Disassembly 窗口增加断点,并在Breakpoints 窗口管理我们的断点。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第6张图片

也可以通过设置添加、删除、使能、失能
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第7张图片

2.1断点类型

到这里,其实ISYSTEM和之前用的编译器,如IAR,KEIL,S32Ds都差不多,但是作为一个专业的高端的牛逼的调试器,功能远远不限于此,下面介绍ISYSTEM提供给我们的复杂断点功能,有人喜欢叫“打桩”,可以说非常形象了。
winIDEA提供了5种断点,分别是
Execution BPs :当代码到这一行,会停下来
Conditional BPs :代码满足执行条件会停下来
Data Access BPs :当这个数据被访问,会停下来
Hardware Breakpoints :硬件断点
Software Breakpoints :软件断点
打开 Debug menu /Breakpoints,断点的管理如下图

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第8张图片最上面红框范围是Execution BPs 的信息,也就是我们最常用的断点类型,可以在这里统一管理。

2.2 Conditional BPs

条件断点可以设置这行代码运行几次,来决定是否停下来。
比如我们在main周期循环里设置两个断点,分别是第22行和25行,第一个断点是普通的执行断点,第二个是条件断点

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第9张图片在第二个断点使能Condition选项,设置运行的次数,这时候启动,每次运行到22行程序都会停下来,但是当运行25行第5次的时候,程序才会停下,并由提示框提醒。

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第10张图片
你甚至可以在Expression窗口添加逻辑判断,基于c语言语法
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第11张图片比如我们直接使用iCounter变量,当它大于等于某一个值时,让它停下。利用这个方法,我们可以利用&& || ! ()设置复杂的逻辑条件。
甚至你可以在action添加python脚本,通过触发脚本来实现联调,这里有非常大的空间可以发挥,比如你外部连接一个数字IO,或者其他的调试设备,或者can卡,来实现对你的控制器测试。

2.3 脚本编写

这部分功能我觉原以为得是调试天花板级别了,。。。。。直到我后面打开了Analyzer 和TestIDEA
它可以载入脚本,用户使用python 调用isystem提供的isystem.connect库使用接口。它真的带来了无限可能,本人能力有限,仅作基本的介绍,更复杂的应用留给各位大佬。
进入watch窗口,右击变量名,创建初始化脚本。
软件会创建一个脚本模板。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第12张图片
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第13张图片
脚本编写完成后,可以通过Tool工具栏下的选项执行操作脚本。或者将脚本添加到conditional breakpoints内

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第14张图片
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第15张图片如果你在脚本最后一行加上debug.run(),程序会继续往前执行,不停下来。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第16张图片

在脚本里,你可以修改变量的值,python的脚本库说明官网给出了,链接在下面。

https://www.isystem.com/downloads/winIDEA/SDK/iSYSTEM.Python.SDK/documentation/isystem-connect-api/index.html

2.4 Hardware Breakpoints和Software Breakpoints

winIDEA默认使用硬件中断,它的实现原理是利用比较CPU PC程序指针是否和断点的偏移量是否一致来判断是否运行到了断点。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第17张图片这种速度最快,但是受限于比较器的数量,所以硬件中断是有数量限制,大大影响了我们的调试。
例如,当你添加了足够多的断点以后,软件会报错提醒。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第18张图片

为了解决这个问题,ISYSTEM提出了Software Breakpoints的方法,当给某一行添加了软件断点后,这一行会被汇编调试命令替换掉,当运行到这一行代码,停下后,再把原来的代码替换回去,这样就断点就不受数量限制。
但是这种方法也有明显的缺点,就是会让程序运行变慢,而且会增加芯片的压力。所以最好的方法还是使用硬件中断,然后利用Condition结合逻辑判断来实现你想要的断点效果。

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第19张图片ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第20张图片
使用方法是Hardware ->use Software Breakpoints,然后再新增断点就可以了,你会发现每次新增断点都非常卡,这是因为软件需要更改你的代码,替换成调试命令,相当于重新烧写芯片flash。

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第21张图片
每次新增断点都对当前块进行重写。说实话,除非特别需要,不要使用软件中断
在这里插入图片描述

2.5 Data Access BPs

顾名思义,这种断点就是基于数据被访问,被写入或者读取,或均出现,都可以触发。对象可以是一个变量或者一段内存。
假如你想监控一个变量,在Watch窗口内,对变量右击,打开菜单,选择set write breakpoints
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第22张图片然后我们启动运行,你会发现,每次当这个变量被写入的时候,程序会停下。
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第23张图片
这是一个快捷操作,完整的设置在hardware breakpoints 菜单内设置。

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第24张图片可以点击左下角wizard进入设置向导。
选择运行的程序
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第25张图片进入
data access
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第26张图片

点击…可以调出变量菜单,这里包含了程序所有的变量,甚至宏定义地址
ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第27张图片
设置触发断点的方式是读、写还是均触发。
甚至你还可以设置变量的MASK用来筛选该变量的值范围。

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第28张图片
设置完成后如右图所示

ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第29张图片当然你也可以在该界面里直接修改。

启动运行后,程序会停在这里。和设置的初衷一致ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧_第30张图片

你可能感兴趣的:(ISYSTEM调试实践,c++,开发语言)