1. gdbtui

  1. 打开tui模式
    gdbtui a.out
    gdb -tui a.out

  2. 调试一个正在运行的进程
    gdb -p pid

在linux自带的终端里是正常显示的,但是在securecrt里面,可能由于编码的问题,边缘会有些乱码,不过不影响使用(如果你的程序有错误输出,会扰乱整个界面,所以在调试的时候,建议添加2>/dev/null,这样的话基本可用)

(gdb) info win  查看当前focusSRC     (36 lines)  <has focus>CMD     (18 lines)
(gdb) fs next  切换focus
Focus set to CMD window.
(gdb) info win SRC     (36 lines)CMD     (18 lines)  <has focus>
(gdb) fs SRC  切换指定focus
Focus set to SRC window.
(gdb)

上面是src窗口,下面是cmd窗口,默认focus在src窗口的,这样的话上下键以及pagedown,pageup都是在移动显示代码,并不显示上下的调试命令

2. gdb常用命令

start                //开始执行程序,停在main函数第一行语句前面等待命令
directory path      //添加一个路径,解决No such file or directory
print(p)            //打印变量内容
continue(c)     //继续执行被调试程序,直至下一个断点或程序结束
info(i) cmd         //列出指令信息
info locals         //查看所有局部变量
delete [num]        //删除断点
display var         //跟踪查看一个变量,每次停下来都显示它的值(取消undisplay)
backtrace(bt)       //查看各级函数调用及参数
set var=           //修改变量的值
sharedlibrary lib   //调试动态库
until [line]        //结束当前循环(,并跳到指定行)
finish              //跳出当前函数
return val          //跳出当前函数,并且返回指定值
i locals            //当前函数局部变量
cd                  //切换目录
pwd                 //显示当前路径
shell cmd           //执行shell命令
make                //调试中编译程序

3. gdb传入参数

(gdb) r 2 3
相当于:
# ./a.out 2 3

4. 格式数据

(gdb) p/x temp[35]
$29 = 0xd

x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量

5. core文件

# gdb a.out core
where

6. 调试子进程

(gdb) set follow-fork-mode child

这样就可以断到子进程里面了,否则断点无效

7. 线程调试
info threads:显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程
thread ID:切换当前调试的线程为指定ID的线程

(gdb) i threads * 2 Thread 0x7ffff7fe9710 (LWP 70799)  0x0000003249aa6820 in sleep () from /lib64/libc.so.61 Thread 0x7ffff7feb700 (LWP 70797)  main () at thread.c:26
(gdb) t 1
[Switching to thread 1 (Thread 0x7ffff7feb700 (LWP 70797))]#0  main () at thread.c:26
26              while(1);
(gdb) i threads 2 Thread 0x7ffff7fe9710 (LWP 70799)  0x0000003249aa6820 in sleep () from /lib64/libc.so.6* 1 Thread 0x7ffff7feb700 (LWP 70797)  main () at thread.c:26
(gdb) set scheduler-locking off|on|step

多线程同时执行一段代码。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行

8. watch
watch通常需要和break,run,continue联合使用

(gdb) watch a              //观察a的值,当有变化时,停止
(gdb) watch *(long*)(a+4)

9. break

(gdb) b main
(gdb) b test.c:main
(gdb) b thread.c:26
(gdb) b test::test

10. 编译时附加编译选项

# CFLAGS="-g -O0" CPPFLAGS=-g ./configure

O0不进行编译优化,调试的时候就会顺畅了,运行流程不会跳来跳去的。发布项目的时候记得不要在使用 -O0参数项,gcc 默认编译或加上-O2优化编译会提高程序运行速度
前提:你的可执行文件和源码是一一对应的

当然,你不加优化也可以,直接-g即可

11. 如果出现如下错误
GDB调试时,提示动态库搜索路径有误。设置动态库搜索路径即可
应用如下命令:set sysroot、set solib-absolute-prefix或set solib-search-path
区别:

  • set sysroot 与 set solib-absolute-prefix 是同一条命令
  • set solib-search-path可设置多个搜索路径,路径之间以“冒号”分隔
  • solib-absolute-prefix设置库的绝对路径;solib-search-path绝对路径和相对路径均可

gdb gdbtui相关推荐

  1. linux下gdb单步调试

    用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...

  2. gdb 调试命令的使用及总结

    GDB: The GNU Project Debugger:http://www.gnu.org/software/gdb/documentation/ 参考:http://www.jianshu.c ...

  3. eclipse gdb gdbserver 远程调试

    https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...

  4. gdb TUI界面快捷键

    ​TUI(TextUser Interface)为GDB调试的文本用户界面,可以方便地显示源代码.汇编和寄存器文本窗口. Tui界面可以通过运行gdbtui或gdb-tui命令进入(其它变种gdb也一 ...

  5. alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb)

    alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb) 1.vim的使用 vim有三种模式:命令模式,末行模式,编辑模式 光标的移动[命令模式] h 向左 ,j 向下,k 向上,l ...

  6. android gdb 命令大全,ndk-gdb  |  Android NDK  |  Android Developers

    NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话.偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档. 要求 要运行命令行原生调试, ...

  7. Git/Ctags/Vim/GDB基础笔记

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  8. gdb常用调试命令汇总!

    在debug模式下,使用GDB进行调试,可以使用的命令汇总如下: (gdb) p *(*pHead)->next   这里声明语句ListNode** pHead,表示查看*pHead执行链表节 ...

  9. 一文带你看透 GDB 的 实现原理 -- ptrace真香

    文章目录 Ptrace 的使用 GDB 的基本实现原理 Example1 通过ptrace 修改 被追踪进程的内存数据 Example2 通过ptrace 对被追踪进程进行单步调试 Ptrace的实现 ...

最新文章

  1. 在js中使用HashMap数据结构,在js中使用K,V数据结构
  2. 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
  3. 2017《面向对象程序设计》寒假作业一
  4. react native windows 搭建(完整版)
  5. 你了解 Assembly.Load 吗?
  6. java string.join找不到_Java String join()用法及代码示例
  7. 元宇宙时代,技术长什么样
  8. python编程学习_使用EduBlocks轻松学习Python编程
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的羽毛球场预约管理系统
  10. [D3] Start Visualizing Data Driven Documents with D3 v4
  11. 获取会话的连接和断开事件
  12. docker技术之基本命令
  13. CentOS 6.3最小化安装后,有些必备工作才可以正常使用
  14. windows下yafu的下载及其安装
  15. 什么是Wiegand协议?什么是韦根26? 什么是韦根34?
  16. Android开发之音乐播放器
  17. Linux 编程 —— 进程间的通信 之 消息队列(zmq socket 学习笔记)
  18. 华为交换机默认vlan都是通的吗_最全的华为交换机vlan配置教程
  19. 2022年终工作总结PPT模板来了~
  20. 分享一个简单的抢购华为商城手机的js脚本,仅供学习交流

热门文章

  1. winform水晶报表中添加图片
  2. 2022考研真题+汤家凤网课视频。祝2022考研朋友顺利上岸!
  3. 计算机毕业设计ssm高校教室申请管理系统yf80k系统+程序+源码+lw+远程部署
  4. 高性能MySQL(第四版):一、MySQL架构
  5. 【CSDN竞赛第25期】赢热门图书《千脑智能》和定制周边
  6. 【**背包dp**】
  7. 计算机企业人员的职称有哪些,企业IT人员评职称需要什么资质
  8. 影视剪辑,你应该掌握的剪辑流程和技巧
  9. java 试题_Java笔试题完整试卷
  10. 前端|利用模态框(Modal)实现弹窗效果