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

    奋斗为了更好的生活。
  • 相关阅读:
    Qt学习之路(33): 国际化(上)
    Qt学习之路(34): 国际化(下)
    QT中文乱码与国际化支持
    MAKEINTRESOURCE
    Qt 资源系统
    用QT在Windows下编写dll程序
    MessageBox
    ADF(自动输稿器)概述
    Visio Studio中的resource.h文件.rc资源
    求正约数个数
  • 原文地址:https://www.cnblogs.com/redman274/p/15359753.html
Copyright © 2011-2022 走看看