首页 > 系统相关 >Linux之GDB调试(一)

Linux之GDB调试(一)

时间:2024-01-10 14:58:22浏览次数:42  
标签:命令 GDB 设置 Linux world 断点 hello 调试

一、C++调试准备工作

调试代码:

#include <iostream>

int main(int argc, char** argv) {
    int iTest = 100;
    const char* str = "this is a test";
    std::cout << "iTest is " << iTest << ",str is" << str << std::endl;
    std::cout << "参数为:" << std::endl;

    for (int i = 0; i < argc; ++i) {
        std::cout << argv[i] << std::endl;
    }

    std::cout << "hello world" << std::endl;

    return 0;
}

 执行编译命令:gcc hello_world.cpp -o hello_world -lstdc++,然后使用GDB进入调试模式:gdb hello_world

"No debugging symbols found in hello_world"表示可执行程序没有调试信息。需要在编译的时候加入 "-g"参数,即gcc hello_world.cpp -o hello_world -lstdc++。执行结束后再次通过GDB进入调试模式:

"Reading symbols from hello_world..."表明可执行程序中已经存在调试信息。

二、GDB调试中常用的命令

1.list命令

显示源代码,默认显示10行,再次输入l后,会继续向下显示源代码

2.break命令

break命令简称b,为程序设置断点。比如说在上述代码的main函数中设置断点,输入命令"b main",结果如下所示,表示在main函数的第四行设置断点。

设置断点的方法有很多种,比如说"b + 文件名:行数",即可在指定文件的所在行中设置断点,如下所示:

输入"i b"命令可以查看设置的断点:

3.run命令

run简称r,输入r之后就开始执行我们的程序。以为上述代码我们设置了两个断点,所以它启动后,遇到这个断点就会中断下来。

因为我们在代码的第四行设置了一个断点,所以程序在第四行的时候停止了下来。

这个时候可以继续往下执行,输入n或者next这个命令它就会往下执行。n代表往下执行一步,此时会走到代码的第五行,iTest也被赋值为100,我们可以通过查看命令p,也就是print的意思,来查看iTest的值。

此时第五行代码还未执行,如果此时查看str变量的值,会发现,它的值是乱码的。需要往下继续执行,然后再查看str的值。

4. 显示全部的局部变量

输入"i locals"命令可以显示文件中的局部变量

 

标签:命令,GDB,设置,Linux,world,断点,hello,调试
From: https://www.cnblogs.com/TechNomad/p/17956456

相关文章

  • 在Linux中清理Buff/cache
    在Linux中,缓冲区和缓存是为提高系统性能而保留的,但如果这些缓存过多,可能会消耗大量内存,影响系统的性能。有时候,您可能需要手动清理这些缓存以释放内存。但请注意,通常不建议定期或频繁地这样做,因为这样做可能会对系统性能产生负面影响。以下是清理buff/cache的几种方法:使用......
  • Linux中yum有何作用?主要功能是什么?
    Linux系统中的yum想必大家都听说过,甚至不少运维小伙伴都经常用到这个功能,但不少初学者对它了解的还不是很多,不知道yum是什么,以及它有哪些作用,本文为大家介绍一下,具体请看下文。在Linux中,yum是一个包管理器,用于管理和安装软件包。它是YellowdogUpdater,Modified的缩写,最初......
  • 迅为RK3568开发板Android11/12/Linux编译驱动到内核
    在平时的驱动开发中,经常需要在内核中配置某种功能,为了方便大家开发和学习,本小节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。Android11源码如果想要修改内核,可以运行以下命令进行修改:cdkernel/makeARCH=arm64rockchip_defconfigmakeARCH=arm64men......
  • Linux ACL 权限的全部内容
    检查是否支持ACLACL需要Linux内核和文件系统的配合才能工作,当前我们能见到的大多数Linux发行版本默认都是支持的。但最好还是能够先检查一下:sudo tune2fs -l /dev/sda1 |grep "Defaultmountoptions:"Default mount options:                 user_xattr......
  • ubuntu安装mysql8,debian安装mysql8,linux安装mysql8,x86_64架构,deb包
    作者主页:https://www.cnblogs.com/milkbox参考:修改大小写:MySQL8.0安装后更改不区分大小写!包你必生效!_mysql8.0不区分大小写-CSDN博客整个安装过程建议在root权限下进行。需要网络来下载相关依赖,如果你的系统已经存在相关以来,那么就可以离线安装。下载与解压去官网下载mys......
  • 在Linux中使用Apache HTTP服务器
    ApacheHTTP服务器,也被称为Apache,是全球使用最广泛的Web服务器软件之一。它以其稳定性、强大的功能和灵活性而闻名,尤其在Linux操作系统上表现得尤为出色。以下是关于如何在Linux中使用ApacheHTTP服务器的详细指南。1.安装Apache首先,你需要安装Apache。在大多数Linux发行版中,可以......
  • 在Linux中处理HTTPS请求
    随着互联网的发展,数据传输的安全性变得越来越重要。HTTPS,全称为安全超文本传输协议(HypertextTransferProtocolSecure),是互联网上应用最广泛的安全传输协议。在Linux系统中处理HTTPS请求,通常涉及到配置Web服务器软件(如Apache或Nginx)来支持SSL/TLS加密。1.安装和配置Web服务器软件......
  • 使用Linux防火墙管理HTTP流量
    在Linux系统中,防火墙是用于控制网络流量的重要工具。通过防火墙,你可以根据需要限制、过滤或允许特定的网络流量,从而提高系统的安全性。在处理HTTP流量时,防火墙可以帮助你实施访问控制、流量监控和其他安全策略。iptablesiptables是Linux中最常用的防火墙工具之一。它允许用户定义一......
  • 使用cURL命令在Linux中测试HTTP服务器的性能
    cURL是一个强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括HTTP、HTTPS、FTP等。在Linux系统中,cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。1.基本请求要向指定的URL发送基本的GET请求,你可以使用以下命令:bash......
  • 在Linux中使用HTTP客户端库进行网络编程
    在Linux环境中进行网络编程时,使用HTTP客户端库可以大大简化开发过程。这些库提供了丰富的功能和工具,使开发者能够轻松地发送和接收HTTP请求。以下是使用HTTP客户端库进行网络编程的一些关键步骤和要点。选择合适的HTTP客户端库在Linux上有多个流行的HTTP客户端库可供选择,如libcurl......