转载自:http://blog.chinaunix.net/uid-22312037-id-3812061.html

一、常规调试
        gdb是Linux下常用的程序调试工具,当然前提是用gcc/g++编译时加上-g参数,这样编译出的可执行程序会加上gdb调试信息。
        gdb命令不少,但常用的主要包括如下命令:
        (1)list [file:]functuon
        命令缩写是l,查看源码,不加参数时,向下显示源码,加参数-l时,向上显示源码,默认显示10行。
        也可以设置在某个函数出列出源码,需要注意的是:如果是非成员函数则用file:function即可,如果是类成员函数则用class::functuon。
        (2)edit [file:]function
        命令缩写是e,编辑当前所在的行,也可以编辑某个函数的源码(规则同list)。
        (3)break [file:]function
        命令缩写是b,设置断点,可以设置在某行或某个函数处(规则同list),此外还可以直接用文件名:行号来设置断点。
        (4)info
        命令缩写是i,列表gdb子命令的信息,如:info break, info variables, info stack等。
        (5)run [arglist]
        命令缩写是r,运行程序至断点处停住,run命令之后可以加上调试程序需要的参数。
        (6)next
        命令缩写是n,单步调试执行语句,如果遇到函数也当一条单步语句而不进入函数,类似于VC中的F10。
        (7)step
        命令缩写是s,单步调试执行语句,如果遇到函数会直接进入函数内部,类似于VC中的F11。
        (8)continue
        名利缩写是c,继续运行程序至下一个断点。
        (9)what
        查看变量类型。
        (10)print
        命令缩写是p,打印变量的值。
        (11)backtrace
        命令缩写是bt,查看堆栈信息。
        (12)enter
        回车键,重复执行上一条调试命令。
        (13)help [name]
        显示指定的gdb命令的帮助信息。
        (14)quit
        命令缩写是q,退出gdb。
        gdb调试运行程序时,用gdb .exe加载程序,gdb调试core dump时,用gdb .exe
.core加载程序,执行r命令可以开始运行程序。在gdb内编辑完代码后,不需要退出gdb,而直接在gdb里make即可,否则之前设置的断点等信息
都付之一炬了。
        
二、多线程调试
        (1)info threads
         命令缩写是info thr, 显示当前可调试的所有线程,每个线程会有一个gdb为其分配的ID,后面操作线程的时候会用这个ID,前面有*的是当前调试的线程。
        (2)thread ID
         命令缩写是thr,切换当前调试的线程为指定ID的线程。
        (3)thread apply ID1 ID2 command
         命令缩写规则同上,让一个或者多个线程执行gdb命令command。
        (4)thread apply all command
         命令缩写规则同上,让所有被调试线程执行gdb命令command。
        (5)set scheduler-locking off|on|step
        在调试多线程程序时,使用step或者continue命令调试当前线程时,其它线程也在并发执行,这个命令可以通过off|on|step来控制线程的执行,即:
        off:不锁定任何线程,即所有线程都执行,这是默认值。
        on:只有当前被调试程序会被执行。
        step:在单步的时候,除了next过一个函数的情况以外,只有当前线程会执行。

【转载】Linux之gdb的更多相关文章

  1. [转载]Linux进程调度原理

    [转载]Linux进程调度原理 Linux进程调度原理 Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务.调度程序会被频繁的执行,所以调度程序要尽可能的高效: 2.加强交 ...

  2. 一文入门Linux下gdb调试(二)

    作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述     今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的 ...

  3. 使用linux的GDB打印STL(vector,map,set..................)

    在linux用gdb或者cgdb计较不爽的地方是无法打印STL的东西,所有啊去网上找了找解决方案https://www.douban.com/note/182826844/?qq-pf-to=pcqq ...

  4. Linux之GDB学习

    Linux之GDB学习 GDB是一款优秀的调试工具,懂的人自然懂,一直以来用它都没有好好整理过使用方法,我用的也是皮毛,目前先整理一下皮毛,日后再更新 使用方法 编译C++ 从编译的角度上来说,需要在 ...

  5. linux中gdb的可视化调试

    今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成 ...

  6. Linux知识(5)----LINUX下GDB调试

    命令 解释 示例   file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample     r c Run的简 ...

  7. [转载]Linux下非root用户如何安装软件

    [转载]Linux下非root用户如何安装软件 来源:https://tlanyan.me/work-with-linux-without-root-permission/ 这是本人遇到的实际问题,之 ...

  8. [转载]Linux 命令详解:./configure、make、make install 命令

    [转载]Linux 命令详解:./configure.make.make install 命令 来源:https://www.cnblogs.com/tinywan/p/7230039.html 这些 ...

  9. [转载]Linux缓存机制

    [转载]Linux缓存机制 来源:https://blog.csdn.net/weixin_38278334/article/details/96478405 linux下的缓存机制及清理buffer ...

  10. linux下gdb如何处理coredump错误

    linux下gdb如何处理coredump错误 在编写C++程序中,我们经常会遇到一种错误,segment fault, 这种coredump错误 会导致程序运行时异常退出或者终止,这种错误没有明显错 ...

随机推荐

  1. ArrayList/Vector的原理、线程安全和迭代Fail-Fast

    疑问 * ArrayList是非线程非安全的,具体是指什么?具体会产生什么问题?* ArrayList的内部原理是什么?为什么可以动态扩容?* Vector是线程安全的,具体是如何实现的?为什么不再推 ...

  2. RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用

    RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用 功能介绍 这个项目经过了大半年的持续更新到目前的阶段基本稳定 所有源代码都是开源的,在gith ...

  3. Swift 必备开发库 (高级篇)

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  4. Hermes实时检索分析平台

    一.序言 随着TDW的发展,公司在大数据离线分析方面已经具备了行业领先的能力.但是,很多应用场景往往要求在数秒内完成对几亿.几十亿甚至几百上千亿的数据分析,从而达到不影响用户体验的目的.如何能够及时有 ...

  5. [算法导论]拓扑排序 @ Python

    class Graph: def __init__(self): self.V = [] class Vertex: def __init__(self, x): self.key = x self. ...

  6. 多个App间传递数据

    平台:Android两个App:A,B:需求:在A中点击一个按钮后,启动B并把数据从A传递到B: 代码: App A: MainActivity.java中添加: Button btn2 = (But ...

  7. mysql用shell建100多字段表并导入

    excel列超过160多个,导入时报错,把excel第一行另存为逗号分隔的csv文件,用shell建表 vim createTable.sh #!/bin/sh str="CA6430M,H ...

  8. GitHub使用简单记录

    根据<GotGitHub>[1]所做的一些整理 1. 浏览托管项目 在GitHub的页面中可以使用键盘快捷键 (1)按下问号(?)会在弹出窗口显示当前页面可用的快捷键. (2)在项目的代码 ...

  9. Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转

    最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式 --======= ...

  10. table变宽格式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...