开发工具使用之 Gdb

多线程调试

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

# 切换到指定线程的堆栈
t 线程号

# 进入正在运行的程序查看堆栈(一般用于排查死锁或者进程卡死的问题)
gdb attach 进程号

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



调试堆栈

# 查看的堆栈
bt

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

# 查看具体某个变量
p 变量名字
# 打印变量的数据,以十六进制的形式打印(默认的是 8 进制)
print/x 变量名字 

# 清理 gdb 的控制台
shell clear



如何生成 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
    1. 用于指定 coredump 文件的生成路径(有些场景可能会无法写入,需要强行用 dd 写进去)
  4. coredump 会生成到指定路径下,然后 gdb 可执行文件 coredump文件

 本篇
开发工具使用之 Gdb 开发工具使用之 Gdb
多线程调试# 查看所有线程的堆栈 thread apply all bt # 切换到指定线程的堆栈 t 线程号 # 进入正在运行的程序查看堆栈(一般用于排查死锁或者进程卡死的问题) gdb attach 进程号 # 查看当前所有线程的
2025-02-12
下一篇 
UDS 协议详解 UDS 协议详解
基本概念对于 UDS 协议,没法剥离出一个完全原子的概念出来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,一股脑的介绍完所有的概念, 然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个逐个的进行穿插
2024-07-21
  目录