IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 调试C/C++程序的常见方法 -> 正文阅读

[C++知识库]调试C/C++程序的常见方法

gdb调试

安装gdb

使用前需要安装gdb:

yum install -y gdb

使用前的准备

在编译文件时,需要加入参数-g来确保编译后的文件可以被调试。

g++ -g demo.cpp -o demo

使用gdb

demo代码1

#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;

void print()
{
    cout << "hello world 111" << endl;
    cout << "hello world 222" << endl;
    cout << "hello world 333" << endl;
}

int main(int argc, char **argv)
{
    for (int i = 0; i < argc; i++)
        cout << i << ' ' << argv[i] << endl;

    int a = 1;
    cout << a << endl;
    a++;
    cout << a << endl;
    a++;
    cout << a << endl;
    print();
    a++;
    cout << a << endl;
    a++;
    cout << a << endl;
    return 0;
}

进入调试

gdb 可执行文件名

成功进入gdb调试后,可以发现命令行首部描述符变成了(gdb)格式。
在这里插入图片描述

运行程序

run命令开始运行程序,遇到断点会停止,如果没有断点则运行结束。该命令可简写成r

(gdb) r

由于未设置断点,可以发现程序运行结束。
请添加图片描述

设置断点

break 行号,在该行设置断点,运行到该行时程序会停止。该命令可简写成b

(gdb) break row_id

由于在12行设置了一个断点,执行run命令后,程序在12行停止。
在这里插入图片描述

下一步

有两个命令都是下一步。

next命令,执行当前语句,如果遇到函数调用,不会进入函数内部(执行了函数,但是gdb并没有进入函数内部)。该命令可简写成n

(gdb) next

请添加图片描述

step命令,执行当前语句,如果遇到函数调用(不可以是库函数,需要时自己声明的函数),会进入函数内部。该命令可简写成s

(gdb) step

请添加图片描述

继续执行

在遇到断点、程序停止之后,我们可以使用continue命令来继续执行程序直到遇到下一个断点。该命令可简写成c

(gdb) continue

在遇到断点之后,程序停止在了12行,输入continue命令,程序继续执行直到结束。

请添加图片描述

设置主函数参数

demo代码中,运行程序时可以像下面这样在主函数中传入参数。

./demo arg1 arg2 arg1000

下面是运行结果:
请添加图片描述
但是在gdb模式下,我们不能像这样传入参数了。

在这里插入图片描述
因此我们需要用新的方式给主程序传入参数:

(gdb) set args 参数1 参数2 ... ... 

在这里插入图片描述

打印变量

使用print命令可以查看变量值。改名了可简写成p

(gdb) print a

请添加图片描述

退出

使用quit命令退出gdb调试。该命令可简写成q

(gdb) quit

请添加图片描述

coredump

Linux中,ulimit命令用来控制shell执行程序的资源。在使用coredump之前,我们需要将core文件最大值设置为unlimited

ulimit -c unlimited

程序在遇到异常终止后,会产生一个core文件,可以使用它对程序进行调试。

请添加图片描述

demo代码2

#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;

int main(int argc, char **argv)
{
    cout << 1 / 0 << endl;
    return 0;
}

编译运行以上代码,程序会发生错误并终止,使用ls命令查看文件,可以发现出现了一个core文件。

使用以下命令对core文件进行调试

gdb 可执行文件名 对应的core文件

请添加图片描述

比较直观的能看到出错的语句,当然其他信息也是很有用的。

程序日志

使用程序log的形式进行调试。本质上是输出中间结果的一种调试方式,相对于gdb调试的优点是调试期间不会暂停程序,更接近于实际环境。

参考资料

  1. C语言技术网

  2. Bilibili_C语言技术网_C语言gdb调试之精髓

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 11:55:13  更:2022-04-29 11:57:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 0:37:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码