首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我没有得到我想要的输出,除非我设置一个断点?

在软件开发过程中,设置断点是一种常用的调试技术,用于帮助开发人员定位和解决代码中的问题。当你没有得到你想要的输出时,设置一个断点可以帮助你在特定的代码行暂停程序的执行,以便你可以检查程序的状态、变量的值以及执行路径。

以下是为什么设置断点可能有助于解决输出问题的几个原因:

  1. 调试代码:通过设置断点,你可以逐行执行代码并观察程序的执行过程。这样可以帮助你发现代码中的错误、逻辑问题或者不符合预期的行为。
  2. 检查变量值:在断点处暂停程序执行时,你可以检查变量的值,以确定它们是否符合预期。这对于查找变量赋值错误、计算错误或者逻辑错误非常有帮助。
  3. 追踪程序流程:通过设置多个断点,你可以跟踪程序的执行路径。这样可以帮助你理解程序的控制流程,找出代码执行的顺序是否符合预期。
  4. 修复并验证代码更改:当你修改代码以修复问题时,设置断点可以帮助你验证修改后的代码是否解决了问题。你可以在断点处重新运行程序,观察输出是否符合预期。
  5. 调试复杂问题:对于一些复杂的问题,可能需要在多个代码路径上设置断点,以便逐步跟踪和分析程序的执行过程。这样可以帮助你更好地理解问题的根本原因。

总之,设置断点是一种有效的调试技术,可以帮助开发人员定位和解决代码中的问题。通过逐行执行代码、检查变量值、追踪程序流程和验证代码更改,你可以更好地理解程序的行为,并找出导致输出问题的原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux中的gdb调试

那么在Linux中的gdb下,我们应该怎么运行呢? 首先确保的是,程序得先运行起来。所以在gdb下 r/run:运行程序 可是直接运行的话就直接结束了,所以还要再run之前先打一个断点。...//每个断点都有自己的编号 d n(断点的编号) :去除断点 删除之前的断点的话,继续重新设置断点的话,断点的序号会是线性增长的,不会重复使用。...如果断点的位置是空行的话,不会执行停留,会到下一个断点的位置 如果想要打开原本“失去作用的断点”的话应该这样子做 enable n:使能n号断点 那么逐过程和逐语句是怎么实现的呢?...c (continue):实现断点间的跳跃运行 finish:直接执行完所在函数就停下来(逐函数运行) 如果写的一个函数里面有一个比较大的循环的话,我们进来运行几遍发现并没有什么问题,那我们进来了怎么出去呢...所以后期的时候,我们就会将Linux远程连接到我们本地的vscode就能够相对于是方便我们的使用。 那为什么我还会写这篇文章呢?

15010

MBProgressHUD && SVProgressHUD 在实际开发中运用

设置内容颜色 compare :SVProgress -- 设置颜色 这里得注意,SVProgress 都是用的类方法,没有setTextColor之类的方法,通过 官方说明文档 + 一个一个测试,...直接设置Progress的backgroundColor -效果图 如上图,我们发现实际的效果并不是我们想要的仅仅改变HUB背景色的效果!...离场动画效果 SVProgress 是没有alpha属性的,除非我们 使用 alloc + init,创建出实例对象,所以alpha设置在这里行不通!...--> 但是,经过我探究发现,虽然没有alpha属性,但是有其他方法可以达到类似效果--->就是上图的setFadeAnimation 方法! ? 进场/离场动画 ? 离场动画效果展示 7....没进断点 SVProgress - 本质也是 UIView,但是我们都是用类方法创建 + 设置其属性的,add 手势方法,应该是 对象方法,不是类方法!

2K60
  • 一文讲透Dubbo负载均衡之最小活跃数算法

    如果是这种框架类的,正如上面写的,我会先搭建一个简单的Demo项目,然后Debug跟进去看。Debug的时候当然需要是设置断点的,那么这个断点如何设置呢?...我们得找到一个突破口,还记得我在《很开心,在使用mybatis的过程中我踩到一个坑》这篇文章中提到的逆向排查的方法吗?这次的文章,我再次展示一下该方法。 看源码之前,我们得冷静的分析。...从第一个断点到第二个断点直接有着怎样的调用链呢? 在没有彻底搞清楚最少活跃数算法之前,这些统统先记录在案但不予理睬。一定要明确目标,带着一个问题进来,就先把带来的问题解决了。...运行一下,让程序停在断点的地方,然后看看控制台的输出: ? ? ?...直接进入到我们的第二个断点的位置,并Debug到下图所示的一行代码(可以点看查看大图): ? 正如上面这图所说的:weight=100回答了一个问题,active=0提出的一个问题。

    89710

    你会在浏览器中打断点吗?我会!

    设置 DevTools 中的代码行断点: 点击Sources选项卡 打开想要设置断点的文件 我们可以在Sources的左侧文件目录中进行搜索 如果想调试的文件层级过于深,我们可以使用⌘ P的快捷键,通过文件名来搜索...打开Sources选项卡 打开想要设置断点的文件 找到代码行 在代码行左侧是行号列,右键点击它。 选择Add conditional breakpoint。一个对话框显示在代码行的下方。...其实,这种情况和「有条件的代码行断点」中加入console.log()效果差不多。 设置日志点的步骤: 打开Sources选项卡。 打开想要设置断点的文件。 找到代码行。 在代码行左侧是行号列。...一个带有「两个点的粉色图标」出现在行号列的顶部。 这个示例展示了在第 9 行设置的「日志代码行断点」,将变量i的值输出到控制台。...当我们想要在更改 DOM 节点或其子节点的代码上暂停时,可以使用 「DOM 变更断点」。 设置 DOM 变更断点的步骤: 点击Elements选项卡。 找到我们想要设置断点的元素。 右键点击元素。

    57710

    区块链101:比特币交易是如何运作的?

    简单的版本: 如果我想把我的一些比特币发送给你,我发布了我的意图,而节点扫描整个比特币网络来验证我是否有我想要发送的比特币,而2)还没有发送给其他人。...变得有点复杂: 我的比特币钱包实际上并没有持有我的比特币。它所做的是保存我的比特币地址,它记录了我所有的交易,因此我的余额。这个地址——一个长串的34个字母和数字——也被称为我的“公钥”。...这整篇文章可以被简化成一个散列,除非我更改、删除或添加任何内容到文本中,同样的散列可以一次又一次地生成。这是一种非常有效的方法来判断是否发生了更改,以及区块链如何确认事务没有被篡改。...这就是为什么它是链的一部分,也就是"区块链"因此,如果前一个块的一小部分被篡改,当前块的散列就必须改变(记住,哈希函数输入中的一个微小的变化会改变输出)。...信息是很好的,但是如果你想要一个有趣的版本,试试BitBonkers。

    96450

    OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的调查

    正常情况下我们将应用打包为一个 jar 之后运行: java -jar target/demo-0.0.1-SNAPSHOT.jar 是可以看到输出结果是符合预期的。...这里还有一个关键是通常我们的代码都会打包为一个 JAR 包,类加载器需要加载这个 JAR 包,同时需要在这个 JAR 包里找到我们之前定义的那个 spi 文件,如果这里查不到文件那就认为没有定义 SPI...从刚才的对 SPI 的原理分析,加上 agent 出现异常,说明理论上就是没有读取到我们配置的文件: java.net.spi.InetAddressResolverProvider。...而配置上 agent 之后使用的 classLoader: 却是一个 JarLoader,这样是无法加载到在 springboot 格式下的配置文件的,至于为什么加载不到,那就要提一下 maven 打包后的文件目录和...条件断点 第二个是条件断点也非常有用,有时候我们需要调试一个公共函数,调用的地方非常多。

    15310

    IDEA断点调试查看底层源码---程序员必备核心素养

    2.断点调试案例1 对于下面的这个程序就是一个简单的for循环的过程,我们在这个过程会打印输出每一步的这个i和sum的具体的数值; 我们首先找到这个debug的按键:这个时候程序就会进入调试的状态,这个之前我们需要设置好断点...,2表示的是console控制台的意思,这个上面显示的信息就是我们的这个断点调试的过程中每一步都会执行的这个i,sum值的打印输出,这个也是debug的一个好处:把这个过程中所有涉及到的数值全部打印输出...我们想要进入这个sort的源码,这个时候我们发现无论是step over还是step into都是进不去的,这个时候我们需要进行额外的配置; 配置方法如下:首先需要进入这个设置(一般我们的配置都是在这个...按键,这个是因为我们上一个案例就是使用这个for循环打印数据,计算结果,没有涉及到什么偏向于底层的操作,但是这个里面我们使用了这个sort方法,因此我们有必要说一下这两个的区别; 第一个是step over...; 除此之外,我们还可以通过简单的案例查看这个动态绑定的过程等等,总之,调试的过程也是提升能力的过程,我们应该多去使用,因为后面的这个方法之类的比较多,我就是因为这个想要查看这个方法的时候不知道如何操作的

    7500

    keil调试程序的断点设置技巧

    原因就在于打印输出时间太久,打乱了程序运行的节奏(而这也是我推荐使用 ITM 调试的一个原因,因为它的输出效率比串口要高得多),或者打印函数本身有问题,也会导致程序运行出现问题。...也就说,如果你设置为 Objects 访问,那么它会根据实际的情况设置访问范围。 为了更好的说明这一点,我构造一个结构体。 这个结构体大小可以看出是 6 个字节。...首先设置一个你需要的断点: 打开断点窗口,并双击你之前设置的断点: 设置 Command 为【printf(“USRAT_Init()\n”)】(注意\n,否则可能不能输出,这个应该是 KEIL...还有一个额外的好处就是,对于所有能设置调试断点的单片机都适用,因此对于调试器也就没有过多的要求了,比如说,不管你是用 JLINK、ST-LINK 还是 CMSIS-DAP(CMSIS-DAP 不能使用...——————————————–以上为引用内容————————————————– 里面有一个比较关键的就是关于条件中断(C),如果你设置的表达式不是一个代码地址,也没有设置读写访问条件,那么就会被设置为条件中断

    3.3K11

    几行烂代码,我赔了16万。

    那么在哪设置的为 true 呢? 没看到代码,我一般是不死心的。 所以,一起去看一眼。...我说:很简单啊,就在每个实现类的第一行代码打上断点就好了。 然后他说:别闹,我经常给你的文章一键三联。 我当时就被感动了,既然是这样的好读者,我当然把可以直接在接口上打断点的这个小技巧教给他啦。...你细品,这个描述是不是迷惑性就没有那么强了,甚至你还会恍然大悟:这不是常识吗? 为什么是方法结束之后,分析具体原因之前,我想先简单分析一下这样的代码写出来的原因。 我猜可能是这样的。...最开始的代码结构是这样: 然后,写着写着发现不对,并发的场景下,库存是一个共享的资源,这玩意得加锁啊。 于是搞了这出: 后面再次审查代码的时候,发现:哟,这个第三步得是一个事务操作才行呀。...所以,为了你顺利调试,你需要在断点上设置一下: 这样只有 SQL 语句是 commit 的时候才会停下来。 又一个调试小细节,送给你,不客气。

    28720

    Chrome断点调试

    (换一行写答案,大家可以看看自己的第一反应是啥) 我最先想到的是,我点击到底有没有成功?点击事件里的方法有没有运行?好,要想知道这个问题的答案,我们立马去打个断点试试看,断点打在哪?自己先琢磨一下。...上面介绍到我单击了两次“逐语句执行”按钮,代码从227行运行到229行,大家觉得这意味着啥?是不是说明从语法上来说,前两句是没有问题的,那么是不是也同时意味着前两句就排除嫌疑了呢?我看不然。...在这里给大家说说我对console这个控制台的理解:这个东东就是一个js解析器,是浏览器本身用来解析运行js的家伙,只不过浏览器通过console让我们开发者在调试过程中,可以控制js的运行以及输出。...这应该是新手很常见的问题,为什么不打断点我就没有办法在控制台直接输出变量的值呢?...困惑二:为什么我直接在console里输入$(“.xxx”)能打印出东西来呢?

    4.6K20

    急速 debug 实战一(浏览器-基础篇)

    最近在写代码的时候越发觉得不是代码有多难,而是当代码出了问题该如何调试,如何追溯本源,这才是最难的。 响应这个要求,我决定写一个关于调试实战系列。本来不打算写这个基础篇章,为了整个的完整性。...在 DevTools 中设置代码行断点: 点击 Sources 标签。 打开包含您想要中断的代码行的文件。 转至代码行。 代码行的左侧是行号列。 点击行号列。 行号列顶部将显示一个蓝色图标。...若要设置条件代码行断点: 点击 Sources 标签。 打开包含您想要中断的代码行的文件。 转至代码行。 代码行的左侧是行号列。 右键点击行号列。...例如,在您发现您的页面请求的是错误网址,并且您想要快速找到导致错误请求的 AJAX 或 Fetch 源代码时,这类断点很有用。 若要设置 XHR 断点: 点击 Sources 标签。...下面介绍一个策略: 在函数在范围内时设置代码行断点。 触发此断点。 当代码仍在代码行断点位置暂停时,即于 DevTools 控制台中调用 debug()。

    3.3K10

    Debug

    其实看一个会写程序的人功力怎么样,我觉得看ta的键盘F10,F11就能知道,如果磨得没有字了,或者油腻腻的(别问我为什么是油腻腻的这个形容词).因为程序写好运行的时候,就像一个个小工厂一样.有条不紊的全力运行...说了一个什么问题,我觉得是描述了一个复杂性的问题以及规模问题,既然详细把握不到,就缩小一些.看局部,因此有了各种系统级调试的奇技淫巧.但是核心做法无非就是"窥探"各种变量的"来世今生".扯得远了,对于程序讲也是...接着需要一点经验,我想这种活,自己哪里有雷是有点数的,那么就在这附近找吧 一步俩步,单步调试,分块调试 这步其实是选填的,就是在一个函数块内更改一些数据再看效果 当然是修bug了 为什么要用VC讲,...如果该行已经设置了断点,那么再次按“F9”功能键会清除该断点。 条件断点: 可以为断点设置一个条件,这样的断点称为条件断点。对于新加的断点,可以单击Conditions按钮,为断点设置一个表达式。...底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动 范围之外的内存区似乎也导致断点起效。

    1.3K20

    dotnet 代码调试方法

    ,想要知道题目的答案是为什么,请看本文 断点调试 从 VisualStudio 中打开源代码,进入调试模式,在调试模式里面可以通过断点的方法调试 断点调试可以用来做什么?...此时就可以尝试通过断点调试里面的给对象设置 id 的方法调试,我给了 F1 设置了一个 id 通过局部变量找到这个属性,右击创建分配了 $1 给这个属性 ?...这也就是一个好的例子说明了禁止公开字段的重要性,公开了字段会影响断点调试 如果我将 F1 更改为属性,那么我愉快在 set 方法打上断点,注意不是一开始就打上断点,而是在我设置了 Name 属性之后才添加断点...进行异常调试的套路是先看输出,如果出现了异常,那么在输出窗口默认可以看到异常是什么和异常的输出 如果发现在输出窗口没有显示任何的异常,此时请右击输出窗口看一下是不是没有开启异常消息 ?...为什么在这里炸了 写出方便调试的代码 这就是为什么异常不是用来随便扔的,想要在异常调试里面能够快速调试就需要依赖代码对异常的处理 减少线程委托使用 先举一个不好的例子,我看到有小伙伴写了这段代码

    1.5K10

    编程能力突飞猛进的奥秘!戳~

    目录 一个知乎问题? 为什么学会Debug 很重要? 如何debug-python为例? 再论debug的重要性 1 新键盘 and 一个知乎问题 为什么写这篇博客?...程序员的关键词应该是创造,而且是高质量、高速创造、时间不等人啊,这一切的基石即是debug 我的回答当中侧重3个方面: 习得抽象能力; 通过读源码、熟悉数据结构、熟知数据结构的应用场景 来习得; 要做的好...如下图所示: 接下来以pycharm为主,演示下如何习得debug能力: 3.0 选个好的ide 选择一个好的ide,会事半功倍,推荐使用 jetbeans 全家桶 3.1 打断点 打断点是个技术活,有没有感觉复杂程序的断点其实比较难确定打点的位置...(打点位置的设定方法我在思维导图中有提及,得多 debug 各种难易程度的程序,找找感觉): 程序很简单,即遍历输出arr,断点打在function test_0() 调用的位置 3.2 跑起来 1 and..., 观察变量的输出情况 debug 过程当中,所有变量的变更情况(动态的过程) 可以通过 varibales 变更面板查看 多练习,可以找到debug的乐趣,这是一种习得能力; 4.

    39820

    IDEA DEBUG 启动慢,启动卡死,本地IDEA环境,千万千万不要在方法上打断点!太坑了!

    下面这个是我本地的一个非常简单的项目,没有方法断点的时候,只要 1.753 秒就启动完成了: 但是当我加上一个方法断点的时候,启动时间直接来到了 35.035 秒: 从 1.7 秒直接飙升到 35 秒,...但是,遗憾的是,大多数文章都是说这样做就好了。但是并没有告诉我为什么这样做就好了。 我很想知道为什么会有这个坑,因为我用方法断点用得还是很多的,关键是以前在使用的过程中完全没有注意到还有这个坑。...反正我是直接就忽略了,根本没有关心弹窗的内容。 至于为什么会在 Mapper 的接口上打方法断点? 都怪我手贱,行了吧。...我觉得这不是我想要的答案,但是好在我在这个帖子下面找到了一个“好事之人”写的回复: 这个好事之人叫做 Gabi 老铁,我看到他回复的第一句话 “I made some research”,我就知道,这波稳了...断点打在这个位置: 以 Debug 的模式运行的时候,有这样的一个图标: 点击之后会有这样的一个弹窗出来: 上面框起来的是对应着程序的每一个方法调用顺序,以及调用完成之后的输出是什么。

    3.8K33

    长文 | 我如何使用 git

    为什么呢?我其实不太确定原因——可能是因为git命令没有给我足够的反馈,也可能是因为提示信息没有完全展示我需要的一切,我没有图形用户界面(GUI),而gst命令实际上充当了这个角色?...只要我还没有请求别人审查,只要它们还属于“我”,我总是可以重写、压缩、重新基线化它们。 为什么?...例如,假设我正在开发一个功能,改变用户设置在用户界面中的显示方式。在开发过程中,我意识到我需要改变用户设置的解析方式,这只是一个两行的更改。...我会将这个两行的更改单独放在一个PR中,即使我是在UI更改中发现需要做这个更改的。为什么?因为如果两天后有人说“我们的设置解析器有问题”,我想能够直接指向UI更改或解析更改,并撤销其中一个。...变基 我会将我的PR变基到主分支上,而不是将主分支合并到我的分支中。为什么?因为当我使用git lr(我的别名,用于查看我分支上的git日志)时,我只想看到我分支上的提交。

    8510

    5分钟教会你如何在生产环境debug代码

    我一般都是使用这两种方式debug线上代码:“通过console找到源代码打断点”和“通过network面板的Initiator找到源代码打断点”。...了解了Initiator的作用思路就清晰了,我们只需要找到离bug最近的一个接口请求,然后从调用链中找到我们需要找到的方法或者函数就可以了。...那么在调用栈中getMessageList的上一个就是我们想要找的源代码位置,点击文件名称就可以跳转到目标源代码具体的位置。 如果跳转到源代码后代码是被压缩的状态,点左下角的花括号将代码格式化。...总结 这篇文章主要介绍了两种在线上debug源码的方法。第一种方法是在控制台找到console输出,点击console右边的文件名称跳转到源码进行debug。...“如果我的文章对你有点帮助,欢迎点赞、在看、收藏、转发分享给其他需要的人,你的支持就是我创造的最大动力,感谢感谢!

    17610

    (转)一探前端开发中的JS调试技巧

    以Chrome开发者工具为例,我们来看一下JS断点调试的基本方法。 Sources断点 首先,测试代码中我们通过上图console的输出结果可以看出代码应该是正常运行了,但是为什么是应该呢?...因为函数中加了一个随机数,而最终结果是否真的是正确的呢?这是毫无意义的猜想,但是假设我现在就是要验证一下:函数传入的两个数、被加的随机数,以及最终的总和。那么该怎么操作呢?...从上图发现,我们在代码中新增了三行console代码,用以打印我们关心的数据变量,而最终我们从控制台(Console面板)中的输出结果,可以很清楚的验证整个计算过程是否正常,进而达到我们题设的验证要求。...既然除了设置断点的方式不一样,功能和Sources面板添加断点效果一样,那么为什么还会存在这种方式呢?...XHR断点的强大之处是可以自定义断点规则,这就意味着我们可以针对某一批、某一个,乃至所有异步请求进行断点设置,非常强大。但是,似乎这个功能在日常开发中用得并不多,至少我用得不多。

    2.8K60

    关于Request复用的那点破事儿。研究明白了,给你汇报一下。

    第一个断点 要找到问题的答案肯定得去翻源码,但是从哪里开始翻呢? 或者换个问题:第一个断点打在哪呢? 遇到这个问题我的第一反应还是从日志里面看看能不能找到相关的线索,从而找到打第一个断点的位置。...我先给你上个动图,你就知道我为什么这么说了: 项目启动之后,第一次调用在断点的地方停下来了,接着第二次调用并没有在断点的地方停下来。...这一小节,主要是分享一下我找到这个突破口的一个过程,两个关键的断点是基于上面考虑设置的。 其实你回想一下,这是一个非常顺其自然的事情,带着问题去调试源码是一件比较简单的事情。 不要怂,就是翻。...我想要在选定 processor 之后,加入一行输出语句: 怎么加呢?...回到文章最开始的这个截图,为什么我发起两次请求,RequestFacade 对象是同一个呢? 因为两次请求用的是同一个 Processor 呀。

    93020

    GDB调试汇编分析

    cgdb工具,因为使用时可以随时看到自己的源代码,看到我们的断点在哪里,每一步返回值到了哪行,更加直观。...分析过程 使用b main指令在main函数处设置断点,然后,使用r指令运行代码,使用disassemble指令获取汇编代码 ?...将上一个函数的基址入栈,从当前%esp开始作为新基址: ? call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为: ? ? ? 实参准备入栈: ? ?...总结反思 这次学习让我对于gdb有了更加深刻地认识,设置断点是我们在进行编写代码时在整体编译没有问题,但是却无法得到我们想要的结果时所进行分段纠错步骤,这次的实践让我对于堆栈变化了有了更加深刻的理解,在使用终端三件工具编程时...,没有编程软件上自带写好我们拿来就用的断点设置按钮,之后若是遇到这样的问题我们只能自己动手去做,所以说这次的实践又是我们掌握的一件有力的linux中C语言编程工具。

    3.3K21
    领券