在公司的一套自建系统里,有个抓包程序经常出现异常重启,单独启动打印日志显示,有段错误。
采用gdb调试发现无法正常调试。因为抓包程序需要root权限,所以该程序的所有者是root,而根据资料显示
“在下列条件下不产生core文件:
( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
( b )进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
( c )用户没有写当前工作目录的许可权;
( d )文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。”原文链接:http://www.linuxidc.com/Linux/2011-08/40051.htm
所以无法简单用生成core,然后gdb定位错误。
而用gdb运行程序则因为无法调用libpcap,程序无法正常。
后来尝试用root权限启动:sudo gdb
gdb可以运行了,但是出现新的问题:无法利用原普通用户的环境变量。
在几多周折后,发现原来gdb是可以设置环境变量的:set env xx=value。
程序终于正常,学习了