开发工具使用之 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 字节的负载类型(payload type) 4 字节的负载长度(仅指头部之后的数据长度,不含 8 字节头部) 其中负载类型为 0x0000 的报文是通用
2025-08-03
下一篇 
UDS 协议详解 UDS 协议详解
对于 UDS 协议,无法剥离出完全原子的概念来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,先一股脑地介绍完所有的概念,然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个进行穿插和联系。 (TODO
2024-07-21
  目录