加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

调试flex生成的代码

发布时间:2020-12-15 04:09:48 所属栏目:百科 来源:网络整理
导读:c语言中可以使用词法分析器flex 通过写好的正则表达式来生成一些DFA自动机的c语言代码, 里面包含了自动机的状态。在网络协议分析尤其是应用层协议分析的时候会用到, 或者是使用BPF过滤器的语法的软件中, 比如libpcap, wireshark, nfdump, l7-filter等

c语言中可以使用词法分析器flex 通过写好的正则表达式来生成一些DFA自动机的c语言代码, 里面包含了自动机的状态。在网络协议分析尤其是应用层协议分析的时候会用到, 或者是使用BPF过滤器的语法的软件中, 比如libpcap, wireshark, nfdump, l7-filter等等。


如何使用gdb或者oprofile或者perf tool来进行调试呢?


gdb老的版本可能就乱了或者每次进入到yy.lex.c之类的文件中运行n命令只会打印出行号, 并不会显示出本行的c语言代码, 最新的gcc版本编译的可能能够识别。

但是oprofile和perf就没有这么强大的功能了, 尝试了到目前最新的oprofile 0.9.9, 使用opannotate --source并不能dump出flex生成的c语言文件的相关信息。

perf 工具使用perf record捕捉后运行perf report 只能得到相关的汇编语言代码。


后来经过查看源代码发现, 生成的c语言文件一般是include到别的c语言文件中, 里面会有一些#line的宏定义, 方便为了调试的时候将当前行定位到不同的地方或者是原始的 .l 文件中, 我们知道#line的作用就是改变当前的行号。

手动将所有#line所在的行全部注释掉, 重新编译。

OK, perf report查看c语言代码一切水到渠成。

目前perf tool基本只能看个大概趋势, 并不是什么精确, 有时候百分比加起来竟然大于100%, 真是让小伙伴们不明觉厉啊。

oprofile用起来有点麻烦, 每次都得手动输入一堆命令行参数, 当然写在了一个脚本里, 但是oprofile好像无法attach正在运行的进程。

听说dtrace是一个很不错的东西, 由于是sun公司搞的,主要是用在spark架构上, 目前尚未听 说有通用的linux版本, 但是有一个systemtap的东西现在正在火热当中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读