开发工具使用之 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文件

 上一篇
Doip 协议详解 Doip 协议详解
Header1 字节的版本号,1 字节的版本号取反,2 字节的报文类型,4 字节的报文长度。 其中报文类型为 0000 的诊断报文,是通用 doip 报文头否定响应,所有类型都需要实现的。 Tcp type0x0005 路由激活请求
2025-08-03
下一篇 
UDS 协议详解 UDS 协议详解
序对于 UDS 协议,没法剥离出一个完全原子的概念出来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,一股脑的介绍完所有的概念, 然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个逐个的进行穿插和联系
2024-07-21
  目录