开发工具使用之 Gdb

常用的 gdb 指令

bt # 查看的堆栈

f 1/2/3/4 # 查看具体第几个帧栈

p 变量名字 # 查看具体某个变量

print/x 变量名字 # 打印变量的数据,以十六进制的形式打印(默认的是 8 进制)

thread apply all bt # 查看所有线程的堆栈

t 线程号 # 切换到指定的线程看堆栈,或者 thread 线程号

gdb attach 进程号 # 进入某个进程查看当前的堆栈信息,有时候可能需要 sudo 的权限

info threads  # 查看当前所有线程的调用栈

shell clear # 清理 gdb 的控制台

kill -2 processId # 等价于对进程 ctrl + c

kill -9 processId # signal kill

如何生成 coredump

  1. 在 shell 中输入 ulimit -c,查看当前允许的生成 coredump 文件的大小
  2. 接着在 shell 中输入 ulimit -c unlimited允许生成无限大小的 coredump 文件
  3. 再在 shell 中输入 echo "kernel.core_pattern=/tmp/core-%e-%p-%t" | sudo dd of=/proc/sys/kernel/core_pattern指定 coredump 文件的生成路径(可以用 vim 修改对应文件,但是有些场景可能会无法写入,所以需要强行用 dd 写进去)
  4. 生成 coredump 后会到指定路径下,然后 gdb 可执行文件,接着在 gdb 的输入模式下,写 core /tmp/core** ,后面填写的是 coredump 文件的路径

 本篇
开发工具使用之 Gdb 开发工具使用之 Gdb
常用的 gdb 指令bt # 查看的堆栈 f 1/2/3/4 # 查看具体第几个帧栈 p 变量名字 # 查看具体某个变量 print/x 变量名字 # 打印变量的数据,以十六进制的形式打印(默认的是 8 进制) thread app
2025-02-12
下一篇 
UDS 协议详解 UDS 协议详解
基本概念对于 UDS 协议,没法剥离出一个完全原子的概念出来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,一股脑的介绍完所有的概念, 然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个逐个的进行穿插
2024-07-21
  目录