Mute Breakpoints:没有麻烦的断点

一、简介

Mute Breakpoints,也被称为“静态断点”,是一种适用于现代调试器的断点机制。与传统断点不同的是,Mute Breakpoints并不会中断程序执行,而是在达到断点处时静默地记录下代码状态信息。因为不需要中断程序,所以它对性能影响比传统断点低得多。

与传统的Symbolic断点不一样,Mute Breakpoints不需要为每个断点都插入一条附加指令,也就不会影响程序执行的速度。同时,Mute Breakpoints可被用于在不在程序运行时插入断点。

最初,Mute Breakpoints只存在于Instrinsic Symbolic Debugger中,它是ILinux中一种基于符号断点的一个工具。现在,Mute Breakpoints得到了广泛应用,如:GDB、LDB、pydev等都已经支持Mute Breakpoints。

二、静态断点的实现

Mute Breakpoints是基于软件断点打造的,而软件断点是通过替换程序语句达到断点目的的。

#include <stdio.h>
inline int test(int a) {
    printf("%d\n", a);
}

int main(void)
{
    int a = 5;
    test(a);
    return 0;
}

如果将上述的代码插入传统的调试器中,它会在执行test()函数一次后暂停。但通过Mute Breakpoints,程序的执行不会发生改变,它将只记录test()函数的状态并在达到断点时通知调试器。

三、在LDB中使用Mute Breakpoints

LDB默认使用的是Stop Symbolic Breakpoints。然而,在某些时候(如100ms内的断点),Stop Symbolic Breakpoints不太适合使用。这时,Mute Breakpoints就派上用场了。

使用Mute Breakpoints在LDB上需要运用“static-breakpoints”命令。使用时,需要指定断点所在的函数,而不需要指定行。

(lldb) static-breakpoints add --function-regex test
Breakpoint 1: where = a.out`test(), address = 0x10af3b4b8

(lldb) run
Process [87568] launched: '/private/tmp/a.out' (x86_64)
5

Process [87568] exited with status = 0 (0x00000000) 

四、与传统断点的比较

Mute Breakpoints是一项非常优秀的调试技术,它极大地改进了断点中断程序执行的缺陷。相较于传统断点,Mute Breakpoints具有以下优势:

1、对程序执行的影响更小:Mute Breakpoints不需要中断程序,所以它的执行效率比传统断点要高得多;

2、更适合某些类型的问题:Mute Breakpoints对于那些需要长时间运行的程序要比传统断点更有用。对于调试大型多线程程序,Mute Breakpoints是非常有利的。

然而,与所有技术一样,Mute Breakpoints并不是解决所有问题的方法。在某些情况下,如高并发、算法中的复杂循环等,使用传统的技术仍然是更明智的选择。

五、总结

静态断点(Mute Breakpoints)是一种极其强大的调试工具,它可以在不降低程序性能的情况下达到调试的目的。Mute Breakpoints和传统断点技术之间没有完全的竞争关系,而是相互补充。只有我们最好理解两者的优缺点,以便在正确的情况下使用适当的调试技术。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/291273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-24 13:14
下一篇 2024-12-24 13:14

相关推荐

  • java断点,JAVA断点

    本文目录一览: 1、Java编程 如何使用断点?? 2、java 如何快速的清除项目中的所有断点 3、java项目中如何打断点测试 4、java中的”断点“是什么意思? 5、jav…

    编程 2025-01-16
  • java断点,JAVA断点

    本文目录一览: 1、Java编程 如何使用断点?? 2、java 如何快速的清除项目中的所有断点 3、java项目中如何打断点测试 4、java中的”断点“是什么意思? 5、jav…

    编程 2025-01-16
  • 谷歌前端断点调试鼠标移入不显示值的简单介绍

    本文目录一览: 1、谷歌浏览器source调试JS时,鼠标悬停在变量上无法观测值,代码全为白色,如何解决? 2、Ecliplse断点调试的时候,不显示变量值,显示Detail fo…

    编程 2024-12-29
  • VSCode打断点没有反应解决方案

    一、可能的原因 1、生成源码的方式不同: 在 Visual Studio 中调试的话,程序会生成 .pdb 文件,这个文件包含了程序的符号表信息,包含了变量名、函数名以及地址等,这…

    编程 2024-12-26
  • nodejs代码怎么打断点(JS打断点)

    本文目录一览: 1、WebStorm3.0 调试nodejs 怎么添加断点 2、如何调试nodejs 3、nodejs如何打断点调试程序 4、怎么结束node.js servers…

    编程 2024-12-23
  • js调试断点监控(js断点调试代码)

    本文目录一览: 1、怎么在f12 js断点失效 2、谷歌浏览器调试js 断点怎么使用 3、javascript中的断点调试是什么意思? 4、怎样从Firebug设断点调试JS代码 …

    编程 2024-12-23
  • php能打断点吗(php断点下载)

    本文目录一览: 1、为什么phpstorm设置断点这么麻烦,还要安装? 2、PHP断点调试 3、如何打断点调试PHP代码 4、phpstorm怎么使用断点调试 5、phpstorm…

    编程 2024-12-20
  • 如何在IDEA中查看所有断点?

    一、打开Debug视图 在IDEA中,要查看所有断点,首先需要打开Debug视图。在IDEA的底部导航栏中,可以找到一个名为Debug的标签页,点击即可打开Debug视图。 二、查…

    编程 2024-12-16
  • php中文件断点上传怎么实现(php中文件断点上传怎么实现传输)

    本文目录一览: 1、php如何实现断点续传 2、php 怎么写断点续传 有插件也行 求大神 3、求PHP 超大文件上传解决方案:分片断点上传(一) 4、php图片如何能断点上传,请…

    编程 2024-12-12
  • python刚开始学就遇到麻烦的简单介绍

    本文目录一览: 1、python编程遇到的几个坑 2、初学者如何学习python? 3、学习python遇到的问题 python编程遇到的几个坑 1. 爬个别特定网站,不一定得用p…

    编程 2024-12-12

发表回复

登录后才能评论