zoukankan      html  css  js  c++  java
  • 记一次segment err ,段错误的排除流程

     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 目录里面的比如进程有哪些描述符,进程启动命令等详细信息。

    奋斗为了更好的生活。
  • 相关阅读:
    Python 实现AEC CBC 加密解密方式
    redis 发布订阅方法与缺陷
    python paramiko 传输下载文件
    Redis 配置文件
    Redis 命令
    window11 | 虚拟机vmWare安装windows11
    十万个为什么 | 文化001-为什么猜灯谜又叫做打灯谜
    ffmpeg | 常用命令使用
    ffmpeg | 常用命令使用
    Adobe系列 | Animate(01)-软件安装
  • 原文地址:https://www.cnblogs.com/redman274/p/15359753.html
Copyright © 2011-2022 走看看