启动:

$gdb <file>  || $gdb 然后(gdb)file <file>

运行:

(gdb)run <该程序本身的命令行参数>

查看代码:

(gdb)list  简写为 (gdb)l

技巧(gdb)list 1,20   //查看1到20行的代码

 

使用断点:

建立断点

(gdb)break  //可以简写为(gdb)b

(gdb)b <function>   || <file>:<function>  //这种是为还没有打开的源代码设置断点

(gdb)b <line>    || <file>:<line>   || <address>   //在一个物理地址设置断点

查看断点

(gdb)info b

删除断点

(gdb)delete <breakpoint number>

(gdb)clear <line> || <file>:<line>

条件断点

(gdb)break <operator(通常是函数名)> if <op> = <value>  //用于在满足某个条件时中断执行,在该operator处暂停

运行过程:

单步跟踪:

(gdb)step //缩写s

往下执行:

(gdb)next //缩写n

检查数据:

(gdb)display <varible>     //例如(gdb)display stack->index

(gdb)print <varible>    //缩写p <varible>

改变数据:

(gdb)set <varible>=<value>      //例如set stack->index=100

检查堆栈:

(gdb)backtrace   //缩写bt, 将会打印当前调用的堆栈,从深到浅

停止程序:

(gdb)quit       //缩写q

多进程调试:

跟踪子进程:

(gdb)set follow-fork-mode child

跟踪父进程:

(gdb)set follow-fork-mode parent

设置gdb在fork时询问跟踪哪一个进程:

(gdb)set follow-fork-mode ask

多线程调试:

如果某一行代码被多个线程使用,可以这样设置断点:

(gdb)b pos.c:17 thread 5  //在地pos.c的17行设置断点,但只对第5个线程生效。

(gdb)info threads  //查看当前应用程序中所有的线程

(gdb)b pos.c:17 thread 5 if ret > 0  //在pos.c的17行设置断点,当内部栈变量ret > 0 时中断

去指定线程:

(gdb)thread <thread number>

锁定调度器来避开gdb根据优先权来改变当前线程:

(gdb)set scheduler-locking on/off

确定当前模式

(gdb)show scheduler -locking

想所有线程应用一个命令:

(gdb)thread apply all <command(比如backtrace)>

(gdb)thread apply 1 4 9 backtrace

调试已有的进程:

$gdb

挂接指定进程 :(gdb)attach <进程号>

脱离指定进程 :(gdb)dettach

调试内核转储文件:

$test

产生一个core文件,需要设置系统环境,见我的博客文章 www.cppblog.com/TianShiDeBaiGu/articles/125785.html

$gdb test core.12345

??????????????????????????,没有尝试过的

(gdb)wacth 监控一个变量改变

(gdb)tbreak临时断点

断点禁用启用

GDB 多进程调试的更多相关文章

  1. GDB多进程调试(转)

    http://www.cnblogs.com/ggjucheng/archive/2011/12/15/2288710.html GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强 ...

  2. gdb多进程调试

    http://blog.csdn.net/nbabn/article/details/24984501 http://blog.csdn.net/zb872676223/article/details ...

  3. GDB常用调试命令以及多进程多线程调试

    http://blog.csdn.net/freeelinux/article/details/53700266 一:普通命令   1.list命令 list  linenum      显示程序第l ...

  4. gdb命令调试技巧

    gdb命令调试技巧 一.信息显示1.显示gdb版本 (gdb) show version2.显示gdb版权 (gdb) show version or show warranty3.启动时不显示提示信 ...

  5. 第09课:GDB 实用调试技巧(下)

    本节课的核心内容: 多线程下禁止线程切换 条件断点 使用 GDB 调试多进程程序 多线程下禁止线程切换 假设现在有 5 个线程,除了主线程,工作线程都是下面这样的一个函数: void thread_p ...

  6. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

  7. Window平台Grmon下如何使用gdb进行调试

    Window平台Grmon下如何使用gdb进行调试 1输入cmd命令,打开其窗口,进入你要执行的文件目录下 2.连接开发板,输入grmon –altjtag –u 3.连上后,输入gdb命令 4.再输 ...

  8. GDB代码调试与使用

    GDB代码调试与使用 Linux下GDB调试代码 源代码 编译生成执行文件 gcc -g test.c -o test 使用GDB调试 启动GDB:gdb test 从第一行列出源代码:list 直接 ...

  9. gdb 多线程调试

    gdb 多线程调试 http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.html  http://hi.baidu.com/lit ...

随机推荐

  1. Linux系统编程(14)——shell常用命令

    1. ls命令 ls命令是列出目录内容(ListDirectory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. "ls -l"命令已详情模式 ...

  2. 如何把apache和nginx 加入到系统服务,用service 命令来控制启动、停止

    1 把apache 加入到系统服务,即用service 命令来控制Apache 启动.停止  如果Linux服务器上默认安装了httpd的话(用rpm -qa|grep httpd查看),那你就可以用 ...

  3. iOS 无效的版本,提交成功,不出现版本号

    最近更新到 iOS 10,提交审核 会卡在 转菊花 ...需要更新到Xcode 8 去提交. 然后提交成功后,版本管理 新版本,构建版本 迟迟不出来.恭喜你,你的版本是无效的.请看看 你的 公司app ...

  4. Conquering Keokradong && Get the Containers(二分)

    Conquering Keokradong Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  5. lua 类实现

    Class={}; Class.classList={}; --保存所有已经定义过的类 --类的类型: 类和接口, 接口也是一种类 Class.TYPE_CLASS="Class" ...

  6. rhel5.8安装mysql测试

    MySQL-rhel5.8 安装:在Linux下安装MySQL有三种方式:第一种以rpm的二进制文件分个安装,第二种是自己编译源码后安装,最后一种是以二进制tar.gz文件来安装(这种安装方式下载安装 ...

  7. MySQL5.6 windows7下安装及基本操作

    图形界面安装MySQL5.6关于图形界面的安装,网上相关相关资料比较多,此处省略安装过程.安装过程中选择安装路径.所需组件及root账号密码.1.目前针对不同用户,MySQL提供了2个不同的版本:My ...

  8. 五、MP3文件认识上的几个误区

    1.每帧播放时长都为26ms? 很多博客和文章都提到,Mp3文件每个帧的播放时长(Frame_PlayingTime)是26ms,这个结论是错误的.公式应该是这样的: 一个帧的播放时长=一个帧的采样个 ...

  9. winform —— 对话框和流及打印

    对话框:  注意引用using System.IO; showdialog();显示对话框,返回一个dialogresult的枚举类型 colorDialog:color属性,用来获取颜色 folde ...

  10. 易语言转C#小试牛刀

    呵呵,用了几年的易语言,太郁闷了,玩过E的童鞋们懂得,偶然机会尝试C#,现正式投入C#门下. 我会把我学习C#的一些知识和重点,实时发不到我的BLOG中,同想学习C#的童鞋一起成长起来.