C++ 在项目中使用GDB

一:GDB 的 TUI 模式使用

GDB的 TUI (Text User Interface)模式提供了一种图形化的调试体验,允许在终端中同时显示源代码,寄存器和汇编代码等信息,下面是GDB TUI的基本操作和快捷键

  1. 显示源代码窗口:(gdb) layout src
  1. 显示寄存器窗口:(gdb) layout regs
  1. 显示汇编代码窗口:(gdb) layout asm

​​

  1. 关闭窗口: Ctrl + X 然后按 A

  2. 刷新窗口:(gdb) refresh

  3. 切换窗口:Ctrl + X 然后按 O

  4. 调整窗口:Ctrl + X 然后按 +, - 来调整窗口大小

  5. 调整布局:layout split

二:常用GDB命令

  1. gdb attach 进程ID

gdb -p <pid>

  1. 启动 gdb 带参数

gdb --args <program> <arg1> <arg2> ...

  1. 打断点

break function, break file.c:10

  1. 查看断点

info breakpoints

  1. 继续执行

continue

  1. 单步调试

step

  1. 跳过当前行(执行当前行单不进入函数)

next

  1. 查看调用栈

bt

  1. 查看变量

print <var>

  1. 查看内存

x/<format> <address> 例如 x/10xw 0x7fffffffe000 #查看10个字(word)的内存

  1. 临时断点,用于跳转到某行执行,执行一次断点会自动删除

tbreak func, tbreak file.c:50

  1. 查看源代码: list

  2. 在窗口中查看源代码: layout src

  3. 监视变量: watch expr

  4. 设置条件断点:break function if <condition>

  5. 捕获异常: catch throw , 除了throw之外,还有fork, loadlibname, uloadlibname。 即在某事发生时gdb停止允许,捕获这些事件。

四:多线程调试方法

  1. 编译下面这个例子: gcc -g -o thread_example thread_example.c -lpthread
cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

void *thread_function(void *arg) {
    int id = *((int *)arg);
    for (int i = 0; i < 5; i++) {
        printf("Thread %d: iteration %d\n", id, i);
        sleep(1);
    }
    return NULL;
}

int main() {
    pthread_t threads[2];
    int thread_args[2] = {1, 2};

    for (int i = 0; i < 2; i++) {
        pthread_create(&threads[i], NULL, thread_function, &thread_args[i]);
    }

    for (int i = 0; i < 2; i++) {
        pthread_join(threads[i], NULL);
    }

    return 0;
}
  1. 查看线程: info threads

  2. 切换线程:thread 2

  3. 查看当前线程调用堆栈: bt

  4. 查看所有线程的调用堆栈: thread apply all bt

相关推荐
昵称画9 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
迷途之人不知返9 小时前
【文件系统】-4-软硬连接
linux
“AI国潮设计-小江”10 小时前
【AIGC实战】Python+SDXL批量生成“潮汕英歌舞不倒翁”IP | 角色一致性与多场景融合方案,附完整代码
开发语言·人工智能·python·prompt·aigc
传奇开心果编程10 小时前
【Rust入门练中学】第6课:结构体与方法
开发语言·rust·结构体·编程语言理论·结构体方法·编程通用语言
code tsunami10 小时前
【无标题】
开发语言·python
CodeGL10 小时前
10、Python基础之进程和线程
开发语言·python
hetao173383711 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
TechWayfarer11 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
1234567890@world11 小时前
正点原子 ATK-DLRK3568 嵌入式Linux系统开发手册V1.3 详细总结
linux·stm32·单片机
sun_weitao12 小时前
极简版 MCP 工具实现方案
java·linux·服务器