机房收费系统之问题记录(2)

本文介绍了断点调试的基础概念及其在程序开发中的应用。通过实际案例解释了如何利用断点进行错误定位,并详细说明了INT3断点、条件断点及监视断点的特点与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【背景】

        在被师傅验机房的时候,发现每次出错,师傅都会设置一个断点进行调试,然后寻找问题的所在,对于断点调试以前只有一个模糊的认识,在刚学VB的时候,以前的师傅就给提示过,但是当时只是知道能够用来进行调错,但是不知道具体怎么使用,又有什么作用?所以也没有经常性的使用,到了后面接触的代码越多,对于断点调试接触的次数越多,也就想要知道他究竟是什么?怎么用?

【情节】

       在看师傅和小伙伴们帮忙调试的时候,发现了一个它的基础作用,就是对于查询或者是代码的“翻译”作用,能够让你充分的明白,这句话到底表达了什么意思,你的错误又出现在了什么地方。

       接下来看一下图片展示:

       

        看完图后我想各位对于我所说的“翻译”应该能够有所理解了。
        接下来就是对于断点调试的基本介绍:
        断点是一个信号,它通知调试器,在某个特定点上暂时将程序执行挂起。当执行在某个断点处挂起时,我们称程序处于中断模式。进入中断模式并不会终止或结束程序的执行。执行可以在任何时候继续。
       CPU有一个单独的执行序列,会一条指令一条指令的顺序执行。要处理类似IO或者硬件时钟这样的异步事件时CPU就要用到中断。硬件中断通常是一个专门的电信号,连接到一个特殊的“响应电路”上。这个电路会感知中断的到来,然后会使CPU停止当前的执行流,保存当前的状态,然后跳转到一个预定义的地址处去执行,这个地址上会有一个中断处理例程。当中断处理例程完成它的工作后,CPU就从之前停止的地方恢复执行。
       断点模式可以看作一种超时。所有元素(例如,函数、变量和对象)都保留在内存中,但它们的移动和活动被挂起了。在中断模式下,您可以检查它们的位置和状态,以查看是否存在冲突或 bug。您可以在中断模式下对程序进行调整。例如,可以更改变量的值。可以移动执行点,这会改变执行恢复后将要执行的下一条语句。在 C++、C# 和 Visual Basic 中,甚至可以在中断模式下对代码本身进行更改。
        常用的断点包括:INT3断点、硬件断点、内存断点、消息断点、条件断点等。
        看完断点的简介之后,有没有想知道这几种常用的断点的强大作用呢?让我们一起来看看INT3断点、条件断点还有监视断点吧!
       INT3断点:
       INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常。程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler)。
        INT 3 (或者DebugBreak(),或者Debugger.Break())指令是我们自己在代码里面硬编码进去的,因此我们在Visual Studio里,在相应的代码行里面点一下,出现一个小红球,也就是说Visual Studio在程序指令集某个地方动态地添加了一个INT 3指令。或者更具体一些,我们在源代码(文本文件)里面设置断点的,Visual Studio需要把代码行翻译成在程序指令集中的位置。Visual Studio之所以需要做翻译,是因为通常一行C++或者 C#代码都会对应好几行汇编指令。因此,Visual Studio需要一个额外的文件来执行这个翻译过程,这个额外的文件叫做调试符号文件(Symbols),是由编译器生成的。Visual Studio系列的编译器,不论是C#、VB.NET还是C++编译器都会生成这个调试符号文件,.pdb 文件。所以如果你花一点时间Debug文件夹的话,你就会发现这个文件。
       条件断点:
       首先我们先看看如何设置条件断点,条件断点有两种,一种是根据触发的次数来设置,另外一种是根据一条预置的条件来设置。
       根据触发次数设置比如说,你有一个循环,循环1000次,你知道有一个BUG总是在500次之后才会出现,因此肯定希望在循环内设置一个断点,但是前面500次都不会触发这个断点,否则连续按500次的F5的确不是一件轻松的差事。
       根据预置条件来设置。如果你已经知道一些条件可能会引发Bug,那么根据条件来设置则最合适不过了。
       在“断点条件(Breakpoint Condition)”对话框里面,只需要输入一条正常的C#、C++或者VB.NET的语句就可以了(当然,语法是根据你项目里面的源代码语法一致),这条语句的要求是必须返回bool值—否则就不是一个条件了。第三个还有断点过滤器,当你在断点上,右键点击弹出的菜单里面,会有一个“过滤(Filter)”菜单,它允许你限制将断点仅设置在特定的线程上。这里我就不细讲了,有兴趣的话,可以自己写一个多线程或者多进程程序试试这个功能。知道断点的原理以后,理解条件断点应该就不会是问题了。
        监视断点:

        有的时候,你可能需要查看程序内部一些变量的值,但是你又不希望中断程序的执行。这个时候,监视断点就很有用了,Visual Studio的监视断点就可以让你做到在不修改程序源代码的前提下,在调试器窗口中打印一些变量的值。对于监视断点我的理解不多,可以说是不理解,不过我想学习既然是重复的,那么这些问题在接下来的学习生活中还会遇到,那个时候就让我继续总结断点调试这个篇章。

【结尾】

       对于断点调试我印象最深刻的就是师傅和小伙伴们帮助我时使用的那些技巧,但是还是需要自己去实践去使用才会有更深的体会,今天的总结是对与断点调试的初印象+加深理解,接下来遇到它的时候才是在熟练中碰出更多的火花!

【福利】

        调试技巧(断点调试)


内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值