在awk里可以这样使用正则:

#截取 a.cn?fr= 中的1211
if(match(url,/fr=[-]+/) > )
{
fr = substr(url,RSTRART + , RLENGTH - )
} #截取 a.cn?ct=test 中的test
if(match(url,/ct=[a-zA-Z]+/) > )
{
fr = substr(url,RSTRART + , RLENGTH - )
}

这样就导致一个需求:复用这些相似的代码 (我终于也培养成了代码洁癖 T_T)那么最先想到的是写成函数,到处调用。首先是功能模块:

# 文件:   logic/parser.awk
# 功能: 从str里找到指定的标记,并返回这个整个或部分标记
# 参数: str 需要搜索的字符串
# flag 查找的字符串
# offset 偏离量,调用时不传递的话当作0来使用
# 返回值: 匹配上的字符串
function getflag(str, flag, offset, __ARGVEND__)
{
if(match(str, flag) > )
{
return substr(str, RSTART + offset, RLENGTH - offset)
}
else
{
return ""
}
}

然后是调用:

@include logic/parser.awk
url = "a.cn?fr=1211"
fr = getflag(url, "fr=[0-9]+", )

看起来很美妙,代码终于变得干净了,起初看起来也都能工作,但是很快会发现使用这个模块的程序会内存泄漏,我之前也知道awk低于3.17的版本会泄漏,但是这个泄漏,也不一定总是发生,某次特意去测的时候就没有发现,当我逐次注释代码时终于发现:当程序里只有一个getflag调用语句时没有泄漏(似乎倒是不在乎在循环里调用多次),但多于一个调用语句,就发生了内存泄漏了,因为这种问题比较难排查,所以记录一下,用作将来的参考

发现一个时隐时现的bug!的更多相关文章

  1. vs2015发现一个字符串拼接 bug

    VS2015支持 字符串拼接 如下: string user="test"; int password=123; string sql=$" user={user};pa ...

  2. 发现一个FreeSWITCH bug

    在研究FreeSWITCH视频会议的混屏问题时候发现一个bug. 已提交jira. 附上代码,问题很明显,不解释 =========================================== ...

  3. 我通过调试ConcurrentLinkedQueue发现一个IDEA的小虫子(bug), vscode复现, eclipse毫无问题

    前言: 本渣渣想分析分析Doug Lea大佬对高并发代码编写思路, 于是找到了我们今天的小主角ConcurrentLinkedQueue进行鞭打, 说实话草稿我都打好了, 就差临门一脚, 给踢折了 直 ...

  4. 一个iOS6系统bug+一个iOS7系统bug

    先看实际工作中遇到的两个bug:(1)iPhone Qzone有一个导航栏背景随着页面滑动而渐变的体验,当页面滑动到一定距离时,会改变导航栏上title文本的颜色,但是有一个莫名其妙的bug,如下:

  5. 记一个神奇的Bug

    多年以后,当Abraham凝视着一行行新时代的代码在屏幕上川流不息的时候,他会想起2019年4月17日那个不平凡夜晚,以及在那个夜晚他发现的那个不可思议的Bug. 虽然像无数个普普通通的夜晚一样,我在 ...

  6. FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG

    发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...

  7. 碰到一个微软的bug:CWinAppEx::GetString

    在调试公司项目代码的时候,有一个系统设置的功能,里面需要从注册表中去读取数据,因为使用了MFC框架所以,为了简化代码直接使用了CWinAppEx::GetString .CWinAppEx::SetS ...

  8. 翻了翻element-ui源码,发现一个很实用的指令clickoutside

    前言 指令(directive)在 vue 开发中是一项很实用的功能,指令可以绑定到某一元素或组件,使功能的颗粒度更精细.今天在翻 element-ui 的源码时,发现一个还挺实用的工具指令,跟大伙分 ...

  9. 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?

    摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...

随机推荐

  1. redis常见错误

    1.Redis Error --MISCONF Redis is configured to save RDB snapshots省略 分析:(linux)未用root启动,用的app用户(没有最高权 ...

  2. DTN学习的一些有用链接

    1.DTN研究组,该网站提供了一些代码,有NS2上的实现,也有用java实现的源码. http://www.dtnrg.org/wiki/Code 2.DTN实现的另一个版本,与ONE比较,目前还没用 ...

  3. ubuntu下libjson-c库的使用问题备忘

    首先安装libjson的c库 #apt-get install libjson0-dev libjson0 安装好后查看/usr/include/json下是否有头文件,有就对了! gcc -o ...

  4. Liferay 6.1开发学习

    http://www.huqiwen.com/2013/01/10/liferay-6-1-development-study-17-springmvc-portlet/ http://www.blo ...

  5. Android之Notification的多种用法

    我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...

  6. Win32 的dll导入

    dll 文件可以导入变量,函数,和C++类,但是导入变量会使执行程序与dll紧耦合,而C++类导入则需要两个文件的开发商所用的编译器相兼容,所以做好只导入函数; 创建dll : 头文件:#ifdef  ...

  7. Linux查看硬件信息以及驱动设备的命令

    用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart) 查看CPU信息:cat /proc/cpuinfo 查看板卡信息:cat /proc/pci 查 ...

  8. php5.3.3安装mongo扩展

    /usr/bin/phpize./configure --with-php-config=/usr/bin/php-configmake && make install/usr/sbi ...

  9. C#获取当前系统磁盘符、系统目录、桌面等

    1.获取方式如下 Environment.SpecialFolder中定义了许多常用的目录 //获取当前系统磁盘符方法1,返回:C: string path = Environment.GetEnvi ...

  10. nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图

    本文基于<LNMP最新源码安装脚本>,Nagios依赖PHP环境和perl环境,由于Nginx不支持Perl的CGI,需先来搭建Perl环境,Nagios原理介绍略.一.下载最新稳定源码包 ...