首页 > 其他 > 详细

记一次segment err ,段错误的排除流程

时间:2022-05-27 19:29:32      阅读:2      评论:0      收藏:0      [点我收藏+]

 1.程序跑飞了,看代码具体到了那行,但是仍然不能确定问题,是snprintf出现的问题,这个时候,使用debug,期望通过debug 能够获取到有效信息,但是gdb到那行后,查看怀疑的空指针,并不是自己想象的错误!

因此换个思路,去查看崩溃时候的打印内存信息,此时发生rbp,rsp有些不正常,局部栈空间的地址是0x07b开始,堆里面的也是,感觉是栈出现了问题,一般认为栈都是0x7FFFF开始的,实际观察,发现是栈溢出 了,JOB刚启动的时候,已经给分配了600K的内存,但是目前用到的空间,局部变了900K导致栈溢出....

   验证这个问题,直接将栈里面的局部大内存变量直接通过malloc使用堆空间的,问题消失。

  排查出这个问题比较侥幸,需要细心查看rbp,rsp,栈大小,程序实际分配的栈的大小,大胆猜测,小心求证。

2.程序在本地目录写文件,如何快速查询到导致写入到了哪个目录里面??

通过find查找,发现效率很低,很多目录没有查询权限,因此想起了查看进程PID,然后通过cat /proc/PID/cmdline,查看到启动时候的命令,因此能查看到具体到哪个目录。

上面排查可以根据程序的具体特征,进程PID,/proc/PID 目录里面的比如进程有哪些描述符,进程启动命令等详细信息。

 

记一次segment err ,段错误的排除流程

原文:https://www.cnblogs.com/redman274/p/15359753.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!