首页 > 其他分享 >使用 gdb 查看 coredump 文件的 backtrace

使用 gdb 查看 coredump 文件的 backtrace

时间:2024-03-17 16:22:33浏览次数:23  
标签:文件 backtrace coredump host gdb 卡死

问题背景

程序退出过程中卡死,但是一旦开启 log 就无法复现问题。于是考虑获取程序卡死时的 coredump 文件,分析其调用栈。一种方法是在程序卡死时,用 kill 命令向其发送一个信号,使程序产生 coredump 文件。

前提

  • Target 上可以产生 core 文件(如 /tmp/<executable-name>-<pid>.core),如果没有,检查 ulimit -c 设置

步骤

  1. 把 coredump 文件从 target 拷到 host
  2. 假设用的交叉编译器是 aarch64-unknown-nto-qnx7.1.0-gdb,在 host 中执行 aarch64-unknown-nto-qnx7.1.0-gdb <executable-file-path> <coredump-file-path>
  3. gdb 开始解析符号,如果提示 "Could not load shared library symbols for xxx libraries",则可以根据提示,设置这些库所在 host 上的路径 set solib-search-path <shared-library-path>
  4. 输入 bt 命令即可查看 backtrace

补充说明

  1. 交叉编译时无需 -g 也可以获取 backtrace 信息
  2. 交叉编译时即使使用了 -O2 优化选项,也可以获取 backtrace 信息
  3. 交叉编译之后,target 上的动态库、可执行文件甚至可以是 strip 过的,不影响获取 backtrace 信息,只要保证 host 上的动态库和可执行文件没有被 strip 即可
  4. 一些信号不会产生 coredump 文件,在我的环境下,发送 SIGQUIT(3),SIGABRT(6), SIGKILL(9) 都没有产生 coredump 文件,而发送 SIGSEGV(11) kill -11 <PID> 是可以生成 coredump 文件的

标签:文件,backtrace,coredump,host,gdb,卡死
From: https://www.cnblogs.com/tengzijian/p/18078728

相关文章

  • gdb调试工具使用教程
    编译的时候必须带-g才会有调试信息常用的命令l=list主函数源码列出多行的办法,默认是十行,两个参数用逗号隔开,前面是开始,后面是终止行b=breakpoint设置断点后面跟数字行数,b6,代表第六行设置断点,infob可以看到所有断点的设置情况,可以用delete删除断点r=run全......
  • MogDB-openGauss中的聚集与分组操作
    MogDB/opengauss中的聚集与分组操作COUNT:对结果集中的元组数量进行计数,如果是COUNT(*),那么会统计所有元组(包括NULL值)的数量,如果是COUNT(colname),那么会忽略NULL值,只统计非NULL值的数量。SUM:对参数中属性的所有值求和。AVG:对参数中属性的而所有值取平均值,要求列的类型......
  • MogDB-opengauss中的连接操作-1
    MogDB/opengauss中的连接操作-1如果FROM关键字后由超过2个及以上(含2个)的表参与连接操作,则该查询可以成为连接查询,也可以叫作多表查询。连接查询是SQL种最基本的操作,它的本质是多个表之间做笛卡尔积,借由这个思想又衍生出自然连接、θ连接等。以下以t1、t2、t3几个基......
  • MogDB-openGauss事务处理语句
    MogDB/openGauss事务处理语句事务是由一组SQL语句序列构成的原子操作集合,它具有原子性、一致性、隔离性和持久性的特点。用户在开始执行一个SQL语句时,实际上就已经开始了一个隐式的事务,而SQL语句执行结束,隐式的事务也会根据SQL语句的执行成功与否分別进行提交(Commit)......
  • MogDB-openGauss视图与物化视图
    MogDB/openGauss视图与物化视图一个数据库通常分成外模式、模式和内模式三种模式:外模式:也叫用户模式,是用户所能访问的一组数据视图,和某一应用的逻辑结构有关,是从模式中导出的一个子集,针对某一具体应用控制访问的可见性。模式:数据库内所包含的逻辑结构,包括基本表的定义等。内......
  • MogDB-openGauss中的集合操作
    MogDB/opengauss中的集合操作UNION:并操作,将UNION关键字两段的结果集做并集操作。EXCEPT:差操作,从左侧的结果集中排除掉右侧的结果集。INTERSECT:交集,对两个结果集做取交集操作。对表t1、t2做UNION操作,具体语句如下:MogDB=#SELECT*FROMt1UNIONSELECT*FROMt2;c1......
  • MogDB-opengauss存储过程的修改
    MogDB/openGauss存储过程的修改SQL中没有提供显式的存储过程修改命令,通常需要通过REPLACE关键字来指定使用当前的存储过程替代之前的同名存储过程。将前文定义的存储过程替换为按照地区分组的数量统计,具体语句如下:MogDB=#CREATEORREPLACEPROCEDUREwarehouse_count()L......
  • MogDB-openGauss访问控制简介
    MogDB/openGauss访问控制简介SQL可以针对不同的数据库对象赋予不同的权限,这样就可以限制用户对数据的不必要访问,提高数据访问的安全性。常见的SQL权限如下:SELECT/UPDATE/DELETE/INSERT:访问、修改基本表或视图的权限REFERENCES:在基本表上创建外键约束的权限TRIGGER:在基本......
  • MogDB-openGauss触发器简介(1)
    MogDB/opengauss触发器简介(1)触发器是对应用动作的响应机制,当应用对一个对象发起DML操作时,就会产生一个触发事件(Event)。如果该对象上拥有该事件对应的触发器,那么就会检查触发器的触发条件(Condition)是否满足,如果满足触发条件,那么就会执行触发动作(Action)。事件:触发器的触发事......
  • MogDB-openGauss存储过程的声明
    MogDB/openGauss存储过程的声明存储过程是一组SQL语句和逻辑控制的集合。数据库系统需要支持创建、删除和修改存储过程的语法。存储过程相比普通的SQL命令,具有如下优点:创建的存储过程保存在数据库系统中,在使用时被调出并且在数据库系统本地进行编译执行,一次编译,多次执行,......