最近使用多线程,老是出现未知错误,比如程序死锁,或者线程突然挂掉,由于是多线程编程,单纯使用cout找不到出错点,只有学好gdb调试才能解决问题.

首先参考https://blog.csdn.net/liigo/article/details/582231

1.gdb调试基础操作

学习的知识点为新建Debug工程,进入gdb调试,加载调试程序,设置断点,查看变量名,单步调试,继续,结束

(1)新建Debug工程

新建工程gdbtest,在CmakeLists中设置编译选项为debug,使用命令

add_compile_options(-std=c++11 -g)

main.cpp如下

#include <stdio.h>
int nGlobalVar =0;
int tempFunction(int a,int b)
{printf("tempFunction is called, a = %d, b = %d /n",a,b);return (a +b);
}
int main()
{int n;n = 1;n++;n--;nGlobalVar += 100;nGlobalVar -= 12;printf("n = %d, nGlobalVar = %d /n",n,nGlobalVar);n = tempFunction(1,2);printf("n = %d",n);return 0;
}

CmakeLists.txt

project(gdbtest)
cmake_minimum_required(VERSION 2.8)
add_compile_options(-std=c++11 -g)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

(2)进入gdb调试

编译后,在生成的可执行文件夹下输入gdb,进入调试模式

(3)载入被调试程序

使用“file”命令载入被调试程序
file gdbtest
输出为Reading symbols from gdbtest…done.
表示在 main 函数开头设置一个断点(Breakpoint)

(4)b+行设置一个断点

b+行在某行设置一个断点
b 17 在17行设置断点

(5)运行调试文件

使用“r”命令执行(Run)被调试文件
程序停在17行

(6)输出变量名

输出变量名的值p+变量名

p nGlobalVar 

输出为
$1 = 88

(7)使用 b+函数名在 函数开头设置一个断点

如使用b tempFunction在tempFunction函数开头设置一个断点

(8)使用s执行下一行代码

(9)继续

使用“c”命令继续(Continue)执行被调试程序,程序将停在第二个断点tempFunction的开头,再次输入c,函数结束输出
Inferior 1 (process 14695) exited normally

(10)q退出gdb

整个实验输出如图

2.qtcreator中使用gdb调试

2.1首先解决错误 qt调试 ptrace:不允许的操作

参考https://blog.csdn.net/makenothing/article/details/9531247
就是修改下面配置
sudo gedit /etc/sysctl.d/10-ptrace.conf
中的 kernel.yama.ptrace_scope = 1
为  kernel.yama.ptrace_scope = 0

2.qtcreator debug基本操作

(1)设置断点
就在行旁边单击就行
(2)查看变量的值
F5进入debug后鼠标放在值上面就会显示
(3)执行下一行
按F10
(4)继续,会跳到下一个断点
也是F5
(5)使用窗口查看变量或者数组的值
点Window->Views->Locals and Expressions
或者直接点下面的Views,选择Locals and Expressions
在下面输入变量或者数组的名称
如图

gdb 调试基础操作和在qtcreator中使用gdb调试相关推荐

  1. GDB调试基础操作详解【GDB调试】

    什么是bug 什么是调试 什么是调试器 注意 启动调试与程序执行 启动调试并传递启动参数 方式一:启动gdb调试时添加参数 方式二:启动gdb调试之后执行r之前设置参数 方式三:启动gdb调试之后执行 ...

  2. 在dw中如何调试html代码,如何在 Dreamweaver 中优化和调试代码 - Dreamweaver 用户指南...

    了解如何在 Dreamweaver 中清除代码.检查浏览器兼容性.验证 XML 文档并使页面符合 XHTML 规范. 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱 ...

  3. 安卓逆向分析中常用动态调试方法总结

    安卓逆向之----常用动态调试方法 一. 前言 逆向分析中常用的分析方法有:静态分析.动态调试.HOOK等.动态调试的好处是:1)可以在调试的过程中知道参数或者局部变量的值以及变化过程,2)可以快速履 ...

  4. VC中自定义打印调试信息函数,打印调试信息到DebugView上

    该文档参考了以下网友的文章,在此表示感谢. 1. (更新)OutputDebugString函数简单封装,实现格式化打印输出(VC++) 链接:http://blog.csdn.net/sunflov ...

  5. IDEA中JAVA代码调试技巧

    提示:以下debug调试方式仅适用于在IDEA中使用 文章目录 前言 一.条件断点调试 二.回到"上一步"调试 三.多线程调试 四.远程调试 (1)项目启动时,先允许远程调试: ( ...

  6. Linux后台开发系列之「08.15 个 gdb 调试基础命令」

    代码键盘 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! gdb 简介 gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都 ...

  7. 多线程调试(gdb命令行和使用集成开发qtcreator查看线程状态)

    我在qtcreator中用调用的gdb找不到如何显示线程号对应的线程名字,因此需要继续学习使用gdb进行多线程调试. 1.创建多线程工程 2.启动进程并查看运行进程对应的id 3.使用gdb连接进程, ...

  8. PostgreSQL源码系列二:Postgres-XL调试基础GDB Debug范例

    一. 前言 接上一篇,上篇的pg_hba的配置还是有点问题的,本篇将通过Debug来解析问题根源. 二. 问题 由于postgres是超级管理账户,实际使用中不可能开放给普通用户,我们模拟下生产环境, ...

  9. Linux中使用GDB调试NS2

    在使用ns2过程中,避免不了要修改或者添加一些模块,对C++代码进行改动.编写好自己的功能模块以后,进行编译执行.但通常不会这么容易通过,经常会出现编译可以通过,但执行是会出错.比较常见的是" ...

最新文章

  1. 面板服务器默认是什么系统,免费Linux服务器管理面板,你用的是哪个?
  2. nero 8.0刻录系统光盘
  3. HTML5编程之旅 第4站 Forms
  4. 合理规划您的硬盘分区
  5. python写小程序-用python编写一个闹钟小程序
  6. 配置文件加载优先级和外部配置文件加载||IDEA外部配置文件无法加载
  7. 精读《手写 SQL 编译器 - 文法介绍》
  8. python数据库增删改查_python实现数据库增删改查
  9. plsql 中的记录型变量和引用型变量
  10. 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
  11. Eigen(2) 模块与头文件
  12. Eclipse,MyEclipse 安装SVN插件
  13. 面向对象程序设计上机练习五(类和对象)
  14. 940mx黑苹果驱动_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!
  15. shell 结束指定端口
  16. VBA批量OCR识别提取身份证照片信息_人脸识别一体机,支持多种证件比对
  17. c语言多位数除法,大数除法 C语言
  18. vue el-select 默认选中
  19. TestStand顺序过程模型中的模型回调序列列表
  20. 9 Creating a Chain of Effects

热门文章

  1. BRCM5.02编译六:No package 'zlib' found
  2. mysql拼音搜索中文_mysql实现用拼音搜索中文的数据库实现
  3. DOTA数据集应用于Yolo-v4(-Tiny)系列1——切割图片与转换Annotation格式
  4. 攻防世界misc——适合作为桌面壁纸
  5. 【python-docx】Python读写Word文件
  6. AppArmor零知识学习一、初识
  7. Cannot set priority of datanode process,hadoop3.1.3配置问题
  8. 【Hadoop篇】启动hdfs集群时,提示: ERROR: Cannot set priority of zkfc process 5668
  9. RDKit|化学特征、药效团提取与2D药效团指纹计算
  10. 【WAF技巧拓展】————9、Bypass WAF Cookbook – MayIKissYou