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. 代码审计-md5()函数

    <?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['pas ...

  2. 青春正盛,未来可期。马上2020了,低成本投资自己:vip测试提升圈

    应部分群友再三强烈建议要求,组建了一个测试提升小分队,相约vip测试提升圈, 这里汇集了一群热爱学习.渴望提升的测试小伙伴,大家都朝着自己的梦想拼命努力: 此圈将助你在接口自动化和性能方向全面提升,提 ...

  3. 【oracle】substr函数 字符截取

  4. A1067 Sort with Swap(0, i) (25 分)

    一.技术总结 题目要求是,只能使用0,进行交换位置,然后达到按序排列,所使用的最少交换次数 输入时,用数组记录好每个数字所在的位置. 然后使用for循环,查看i当前位置是否为该数字,核心是等待0回到自 ...

  5. 2.Python学习之路

    这里主要更新Python每个部分知识点的详细的目录...(知识点目录) Python基础 一.计算机基础 二.Python基础 三.函数 四.常用模块 五.模块和包 六.面向对象 Python进阶 七 ...

  6. 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像

    Docker制作dotnet core控制台程序镜像 基于dotnet SDK 新建控制台程序 mkdir /home/console cd /home/console dotnet new cons ...

  7. snowflake ID生成器

    背景 Snowflake 是 Twitter 内部的一个 ID 生算法, 可以通过一些简单的规则保证在大规模分布式情况下生成唯一的 ID 号码. 其组成为: 第一个 bit 为未使用的符号位. 第二部 ...

  8. 下载工具系列——Aria2 (几乎全能的下载神器)

    一.介绍 说完了前面一堆BT/PT客户端,现在终于轮到Aria2了,关于这个我就不介绍太多了,自从百度限速以来我觉得这个快变成众所周知的了,我平时也收集了各种和Aria2相关的插件或者是辅助软件之类的 ...

  9. 零次学习(Zero-Shot Learning)入门(转)

    很久没有更文章了,主要是没有找到zero-shot learning(ZSL)方面我特别想要分享的文章,且中间有一段时间在考虑要不要继续做这个题目,再加上我懒 (¬_¬),所以一直拖到了现在. 最近科 ...

  10. Docker安装和上传容器

    安装Docker Requirements for Mac(硬件要求): Mac的硬件必须是2010或者更新的,需要支持memory management unit(MMU) virtualizait ...