Browsed by
标签: Debug

eBPF 介绍

eBPF 介绍

很早前就想写一篇关于eBPF的文章,但是迟迟没有动手,这两天有点时间,所以就来写一篇,这文章主要还是简单的介绍eBPF 是用来干什么的,并通过几个示例来介绍是怎么玩的,这个技术非常非常之强,Linux 操作系统的观测性实在是太强大了,并在 BCC 加持下变得一览无余。这个技术不是一般的运维人员或是系统管理员可以驾驭的,这个还是要有底层系统知识并有一定开发能力的技术人员才能驾驭的了的。我在这篇文章的最后给了个彩蛋。

介绍

eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。

出于对更好的 Linux 跟踪工具的需求,eBPF 从 dtrace中汲取灵感,dtrace 是一种主要用于 Solaris 和 BSD 操作系统的动态跟踪工具。与 dtrace 不同,Linux 无法全面了解正在运行的系统,因为它仅限于系统调用、库调用和函数的特定框架。在Berkeley Packet Filter  (BPF)(一种使用内核 VM 编写打包过滤代码的工具)的基础上,一小群工程师开始扩展 BPF 后端以提供与 dtrace 类似的功能集。 eBPF 诞生了。2014 年随 Linux 3.18 首次限量发布,充分利用 eBPF 至少需要 Linux 4.4 以上版本

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (31 人打了分,平均分: 4.19 )
Loading...
橡皮鸭程序调试法

橡皮鸭程序调试法

Rubber Duck Debugging下面,让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”,这个方法在调试界是很出众的,实施起来相当方便和简易,几乎可以随时随地地实验,几乎不需要借助任何的软件和硬件的支持,你甚至可以把你的程序打印出来,在纸面上进行调试。

那么,为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。

好了,话不多说,下面是整个调试方法的流程。

  1. 找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
  2. 把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
  3. 然后,打开你的源代码。不管是电脑里的还是打印出来的。
  4. 对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
  5. 当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
  6. 找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。

什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (19 人打了分,平均分: 4.26 )
Loading...
GDB 7.0 发布

GDB 7.0 发布

2009年10月06日,GDB7.0正式发布,新的版本你可以在这里下载。本次版本,不但有大家所关注的《GDB回溯调试技术》,同样还有其它大量的新特性,和对新平台的支持。

新版的GDB7.0支持如下新的平台或配置:

  • x86/x86_64 Darwin
  • x86_64 MinGW
  • Lattice Mico32
  • x86/x86_64 DICOS
  • S+core 3
  • The remote stub now supports x86 Windows CE

其主要的新加入的功能有:(看上去相当地高科技啊,很多术语都不知道怎么翻译,请注意后面的相关解释)

  • Python 脚本调试
  • 回溯调试,调式过程记录并重演。
  • 不间隔调试。 Non-stop debugging
  • 并行调试。 Multi-architecture debugging
  • 多进程调试。Multi-inferior, multi-process debugging

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 2.67 )
Loading...
高科技:GDB回溯调试

高科技:GDB回溯调试

也许大家知道,GDB 版本7.0 (2009年9月release) 会是第一次开始支持Reversable Debugging (回溯调式技术),这是一种可以让在debug程序时当我们运行单步调试或是运行到断点时,可以以逆向执行程序的一种技术。(这是GNU的新闻链接

下面是GDB7.0版本所支持的回溯调试的命令,其中包括,continue,step,以及调试方向的设置。

  • reverse-continue (‘rc’) — 继续程序运行到断点,但是是逆向运行程序。
  • reverse-finish — 逆向运行程序直到跳出本层函数。
  • reverse-next (‘rn’) — 语句单步向后跟踪程序。
  • reverse-nexti (‘rni’) — 指令单步向后一条指令。
  • reverse-step (‘rs’) — 向后执行一条语句,单步进入。
  • reverse-stepi — 向后执行一条指令,单步进入。
  • set exec-direction (forward/reverse) — 设置程序执行方向,向前或向后。
  • 阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 3.64 )
    Loading...
    如何调试bash脚本

    如何调试bash脚本

    如何调试Bash脚本Bash 是Linux操作系统的默认Shell脚本。Shell是用来处理操作系统和用户交互的一个程序。Shell的脚本可以帮助用户自动化地和操作系统进行交互。你也可以理解为一种脚本式的编程。即然有编程,那么,程序的编译器,解释器,调试器就必不可少了,Bash也一样,但在调试方面可能会有一些和编程语言不一样的东西和技术,所以,下面这篇文章主要是说明调试bash脚本的各种技术。

    跟踪脚本的执行

    你可以让bash打印出你脚本执行的过程中的所有语句。这很简单,只需要使用bash的-x选项就可以做到,下面让我们来看一下。

    阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (14 人打了分,平均分: 3.79 )
    Loading...
    23,148,855,308,184,500

    23,148,855,308,184,500

     上个月VISA信用卡出事了,某个美国人在加油站买了一包香烟,于是他的信用卡里就有了标题那个数字的钱“$23,148,855,308,184,500”,注意这可以美刀啊,相当于美国整个国家国债的N倍。

    程序员们开始疯狂了,他们在stackoverflow.com上开始人肉debug这个问题(贴子)。排名第一的回答(564 votes)说,这个数字转成十六进制是:0x2020 2020 2020 1250,很明显,前面的若干个0X20表示的是空格,也就是说,程序错误地处理了空格。于是本回答后的跟贴把这个回答推举成了本年度最牛的debug——”best debug of the year”,后面还有人说这个人应该在NASA工作,继而有人跟贴,应该是VISA而不是NASA……

    当然,也有人有不同的意见……

    阅读全文 Read More

    好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 4.11 )
    Loading...