gdb 调试基础操作和在qtcreator中使用gdb调试

原创 2018年04月16日 17:05:53

  最近使用多线程,老是出现未知错误,比如程序死锁,或者线程突然挂掉,由于是多线程编程,单纯使用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
在下面输入变量或者数组的名称
如图
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ktigerhero3/article/details/79961266

基于CMakelists的程序调试--QT

很多开源程序,都是使用CMakelists写的。出现问题时,使用gdb进行调试比较麻烦,gdb调试时要求程序是Debug编译的。 一种办法是把程序修改成基于Qt的程序,但是修改的过程中,肯行也会遇到很...
  • w1019220367
  • w1019220367
  • 2016-09-08 22:10:54
  • 1174

gdb 调试基础操作和在qtcreator中使用gdb调试

  最近使用多线程,老是出现未知错误,比如程序死锁,或者线程突然挂掉,由于是多线程编程,单纯使用cout找不到出错点,只有学好gdb调试才能解决问题. 首先参考https://blog.csdn.n...
  • ktigerhero3
  • ktigerhero3
  • 2018-04-16 17:05:53
  • 31

QtDebug: Linux上使用Qt Creator进行C/C++开发

转自:http://my.oschina.net/eechen/blog/166969 目录[-] 1、安装Qt Creator和基础构建环境(以Ubuntu为例):2、把自动完成...
  • zyh821351004
  • zyh821351004
  • 2015-04-21 20:52:24
  • 2291

用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1、在虚拟机Ubuntu...
  • USB_ABC
  • USB_ABC
  • 2016-06-10 16:30:57
  • 3419

Linux下gdb调试用法命令

一直在Fedora平台下写opencv的程序,需要对程序进行调试,主要用的调试工具是gdb. gdb提供了如下功能: 1.在程序中设置断点,Debug时遇到断点处暂停 2.可以监视某个变量,并利用...
  • keith_bb
  • keith_bb
  • 2017-02-15 22:32:00
  • 3696

windows下,用qtcreator进行debug调试

最近换了qt-win-opensource-4.8.5-mingw,使用qtcreator,发现在debug下单步调试,总是报gdb.exe崩溃。     看了一些网上资料,很多都是呀下载debug ...
  • andiknow068
  • andiknow068
  • 2014-02-20 10:17:03
  • 715

qtcreator下cmake工程交叉编译及远程部署环境搭建

1 安装目标开发板对应的交叉编译器。 首先,在开发板上使用下面命令查看cpu硬件架构: uname -a我的显示有aarch64字样,即我的开发板为armv8a-aarch64架构。接下来在开发电脑上...
  • qq_29573053
  • qq_29573053
  • 2017-12-01 13:16:44
  • 131

postgresql学习笔记【1】-Linux+eclipse+gdb调试postgresql源码

pg内核源码解析课上用的vs调试pg源码, VS用起来确实方便,但是配置调试环境着实有点麻烦。首先得装个windows系统,最好是xp,win7稍微麻烦点;最好使用vs05,08和10也可以,但是比0...
  • bhq2010
  • bhq2010
  • 2013-09-30 19:46:22
  • 2447

GDB调试器的简单使用(通过实例一步一步的说明该如何去调试)

        Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强 力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是...
  • lxiron
  • lxiron
  • 2010-11-04 23:38:00
  • 7176

qtcreator下cmake工程交叉编译及远程部署环境搭建

1 安装目标开发板对应的交叉编译器。 首先,在开发板上使用下面命令查看cpu硬件架构: uname -a我的显示有aarch64字样,即我的开发板为armv8a-aarch64架构。接下来在开发电脑上...
  • qq_29573053
  • qq_29573053
  • 2017-12-01 13:16:44
  • 131
收藏助手
不良信息举报
您举报文章:gdb 调试基础操作和在qtcreator中使用gdb调试
举报原因:
原因补充:

(最多只允许输入30个字)