`

从dmesg里分析core原因

 
阅读更多

服务器上由于怕软件bug以及磁盘的限制,一般会将core文件关掉.

ulimit -a查看当前core file size设置.

这样程序有bug崩溃以后,只能通过dmesg查看有限信息.典型信息如下:

collector[1847]: segfault at 000000000000000c rip 000000000040308a rsp 0000007fbffff820 error 4

at后面地址:访问越界的地址,rip:指令地址,rsp:栈地址,error:错误类型.

error number是由三个字位组成的,从高到底分别为bit2 bit1和bit0,所以它的取值范围是0~7.
bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

一般的程序带-g编译的话用addr2line -e ./collector 000000000040308a就大概能定位到函数

想具体一点定位可能是哪行语句的话,用objdump -d ./collector查看40308a对应的程序汇编代码即可.

当然core文件能更好的帮助解决问题,最好还是在程序里用setrlimit来设置core文件,然后根据命令行参数及是否已经生成了core文件等逻辑来判断是否生成core文件.

分享到:
评论

相关推荐

    Dmesg输出程序错误信息

    同时,查看相关的核心转储(core dump)文件也可以提供更详细的上下文信息,帮助定位问题的具体原因。此外,检查程序的内存管理,包括动态内存分配和释放,也是排查这类问题的重要步骤。 总之,`dmesg` 提供的这段...

    Unix环境下core dump 分析

    分析core dump通常需要结合调试器,如GDB(GNU Debugger)。首先,确保core dump文件和导致其生成的可执行文件在同一目录下,或者知道core dump文件的完整路径。然后,可以使用GDB的`file`命令加载可执行文件,`core...

    Linux环境下段错误(Segmentation fault)的产生原因及调试方法

    通过gdb或其他工具分析core dump,可以详细地了解段错误发生时的内存布局和变量状态。 4. 使用valgrind: Valgrind是一个用于内存调试、内存泄漏检测和性能分析的工具,它可以发现诸如段错误、未初始化的内存访问、...

    Linux下的USB程序分析.rar_Linux下的USB程序分析_usb

    USB驱动程序分为两层:核心层(USB core)和设备驱动层。核心层处理与USB控制器的硬件交互,设备驱动层则专门处理特定类型的USB设备。在Linux中,USB驱动通常被实现为内核模块,可以在需要时动态加载。 USB设备的...

    adb logcat支持kernel打印

    开发者可以结合`dmesg`命令(在设备端)和adb logcat一起,进行更深入的系统分析。 需要注意的是,这种做法可能会增加系统的复杂性,并且可能会对性能造成一定影响,因为它需要实时地从kernel空间传递日志到用户...

    中科曙光-ParaStor300S-Ustor统一存储私有客户端安装后挂载不上存储问题.docx

    - **查看Core文件调用堆栈**:通过分析core文件中的调用堆栈信息,可以初步定位到服务崩溃的具体位置。 - **CPU核数检查**: - 使用`lscpu`命令查看CPU信息。 - 发现POSIX标准的最大支持CPU核数为256。 - 通过`...

    linux调试工具

    7. **core dump分析**:当程序崩溃时,Linux会生成core dump文件,记录了程序崩溃时刻的内存快照。通过分析这些文件,可以了解程序崩溃的原因。 8. **log分析工具**:如`grep`, `awk`, `sed`等,常用于处理和分析...

    elan_i2c_core.rar_Linux smbus i2c_elan touchpad_touchpad

    3. `elan_i2c_core.c`源代码分析 `elan_i2c_core.c`是Elan触控板驱动的核心源代码,负责处理I2C通信、中断处理、数据解析等工作。在驱动中,你可以看到初始化过程,包括设置I2C客户端、注册设备节点、分配内存以及...

    捕获系统崩溃信息.docx

    通过查看内存地址,结合`dmesg`命令获取的系统崩溃信息,可以帮助定位问题所在。 在Windows系统中,获取系统崩溃日志的操作流程如下: 1. **查看系统事件日志**:进入“事件查看器”->“Windows 日志”->“应用...

    linux 内核调试文档

    - 学习如何从汇编语言层面分析C代码,这对于理解内核崩溃时的底层细节非常重要。 #### 十、初步转储分析 - 使用`gdb`等工具来分析转储文件,找出导致崩溃的具体原因。 - 分析堆栈跟踪信息、寄存器状态等数据。 ##...

    linux编译与调试

    2. **核心转储**:当程序异常崩溃时,可以通过生成核心转储文件分析问题,gdb可配合core文件进行后处理。 3. **日志记录**:Linux下常用syslog、dmesg等工具记录系统日志,用于后期排查问题。 4. **strace和ltrace...

    linux下C++调试技巧

    通过分析core dump,我们可以知道程序在崩溃时的状态,包括调用堆栈、变量值等。要生成core dump,需要设置`ulimit -c unlimited`,然后当程序崩溃时,可以用GDB加载core dump文件进行调试。`gdb <binary> <coredump...

    Linux调试Bv8.35.rar

    这款软件可能是用于核心板(Core Board)的在线调试工具,允许开发者在运行时检查、分析和修改内核行为,从而诊断问题、优化性能或添加新功能。 Linux调试涉及到的知识点非常广泛,包括但不限于以下几个方面: 1. ...

    Linux Debugging and Performance Tuning Tips and Techniques.rar

    1. **日志分析**:Linux系统的日志如syslog、dmesg和journalctl是诊断问题的第一步。学习如何阅读和理解这些日志可以帮助识别错误和异常。 2. **GDB (GNU Debugger)**:这是一个强大的源代码级调试器,用于调试C、...

    zerocore-crash:你能帮我帮助那些家伙吗,我不知道为什么会这样

    2. **内核调试**:当遇到零核崩溃时,通常需要通过内核调试器来分析内存转储文件,寻找导致崩溃的原因。 3. **系统日志分析**:查看系统日志(例如Windows的事件查看器或Linux的dmesg)可以提供崩溃前后的活动线索...

    最新RTL8723BU Linux内核驱动源码

    - `src`目录下是驱动的主要实现,如`core`子目录包含核心功能,`hal`子目录包含了硬件相关的函数,`osdep`提供了操作系统依赖的服务。 4. **编译与安装** - 对于Linux内核驱动,用户需要先确保内核版本与驱动源码...

    解决nvidia tx2 在自制底板上usb无法识别的替换文modules

    6. **日志分析**:通过`dmesg`命令查看系统启动和USB设备识别的日志信息,这有助于定位问题所在。如果日志显示错误,分析错误信息并根据需要进一步调试驱动代码。 7. **测试USB设备**:一旦USB驱动加载成功,尝试...

    D1_Linux_TWI_开发指南1

    - 文档中可能涵盖了如何使用调试工具(如dmesg、i2cdetect、i2cget/i2cset等)来检测TWI总线上的设备,以及如何通过日志分析和内核模块调试来解决驱动问题。 这份D1 Linux TWI开发指南1.2版,提供了全面的TWI驱动...

Global site tag (gtag.js) - Google Analytics