1. gdbtui

  1. 打开tui模式

    gdbtui a.out

    gdb -tui a.out

  2. 调试一个正在运行的进程

    gdb -p pid

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

(gdb) info win  查看当前focus
SRC (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) //打印变量内容
info(i) cmd //列出指令信息
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.6
1 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. MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客

    http://mingxinglai.com/cn/2013/07/gdbtui/ MySQL源码注释与类图 http://mingxinglai.com/cn/2015/08/mysql-annot ...

  2. linux包之gdb之gdb命令与core文件产生

    gdb-7.2-64.el6_5.2.x86_64/usr/bin/gcore/usr/bin/gdb/usr/bin/gdb-add-index/usr/bin/gdbtui/usr/bin/gst ...

  3. 用Eclipse和GDB构建ARM交叉编译和在线调试环境

    我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.04 LTS 为例. 搭建应用开发环境   安装 JRE Eclipse 依赖于Java 环境,所以必须先安装 JRE 或 JD ...

  4. gdb tui中切换窗口

    gdb的gui用法 调试代码的时候,只能看到下一行,每次使用list非常烦,不知道当前代码的context  http://beej.us/guide/bggdb/#compiling 简单来说就是在 ...

  5. gdb各种调试命令和技巧

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

  6. 关于 cgdb & gdbtui 的输入scanf()问题

    使用cgdb 和 gdbtui 调试程序时, 遇到scanf函数时 it seems to enter into an infinite loop According to the info page ...

  7. 安装GDB和GDBSERVER

    安装GDB和GDBSERVER 转自http://www.360doc.com/content/10/0407/17/155970_21971613.shtml 把GDBSERVER装入文件系统 转自 ...

  8. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

  9. 新手如何在gdb中存活

    网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...

随机推荐

  1. 201871010108-高文利《面向对象程序设计(java)》第十六周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...

  2. day7_7.5 字符表与文件操作

    一.字符编码. 1. 在计算机的运行中,有三大部分组成,计算机硬件,操作系统,应用程序,当使用者在使用文档编写文字时,所显示的所有字符都存储在内存中,随后再存储在硬盘里,(仅限文字),所以,当美国人发 ...

  3. 莫烦TensorFlow_08 tensorboard可视化进阶

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # # add layer # def add_l ...

  4. Sring StringBuffer StringBuilder封装类

    Sring StringBuffer StringBuilder封装类 一.String类常见方法的使用 字符串数据都是一个对象 字符串数据一旦初始化就不可以被改变 字符串对象都存储于常量池中,字符串 ...

  5. python 之Entry

    # Tkinter教程之Entry篇 # Entry用来输入单行文本 from tkinter import * root = Tk() # 创建entry Entry(root, text='inp ...

  6. CPU-bound(计算密集型) 和I/O bound(I/O密集型)/数据密集型

    https://blog.csdn.net/q_l_s/article/details/51538039 I/O密集型 (CPU-bound)I/O bound 指的是系统的CPU效能相对硬盘/内存的 ...

  7. The Preliminary Contest for ICPC Asia Shanghai 2019 C. Triple

    [传送门] FFT第三题! 其实就是要求有多少三元组满足两短边之和大于等于第三边. 考虑容斥,就是枚举最长边,另外两个数组里有多少对边之和比它小,然后就是 $n^3$ 减去这个答案. 当 $n \le ...

  8. PassGuard密码控件配置

    运行环境 win服务器 系统server2008R2 C# ASP.NET服务器页面 前端部分      1.引用 //JS部分引用 <script type="text/javasc ...

  9. [LeetCode] 76. Minimum Window Substring 最小窗口子串

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  10. [原创]浅谈在创业公司对MVP的理解

    [原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...