modern_cpp_1-在ubuntu上搭建c++开发环境


Modern C++系列的博客是根据Bonn University的Modern C++课程所作的笔记,兼具笔者个人的实践和思考,谬误之处还请指出。

课程链接

https://www.bilibili.com/video/BV1xZ4y1X7dN

搭建环境

Linux上搭建C++开发环境,最重要的就是vim、 gcc/g++ 和 gdb,其中

  1. vim是文本编辑器;

  2. gcc(GNU Compiler Collection)顾名思义,即GNU开发的一组适合多平台的编译器的统称,如果要开发C++程序,则需要安装g++;

  3. gbd则是功能强大的调试器,可以设置断点使程序停住,监控并修改程序中的变量,跟踪代码的执行过程

安装build-essential

幸运的是,ubuntu提供了一套工具包,涵盖了上述的大部分的工具,直接运行以下命令即可安装:

$ sudo apt-get install build-essential

通过下面的命令,可查看该工具包的依赖:

$ sudo apt-cache depends build-essential
build-essential
 |Depends: libc6-dev
  Depends: <libc-dev>
    libc6-dev
  Depends: gcc
  Depends: g++
  Depends: make
    make-guile
  Depends: dpkg-dev

运行以下命令查看g++版本:

g++ --version

安装gdb

通过下面的命令安装gdb

sudo apt-get install gdb

查看gdb版本:

$ gdb --version
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

测试

测试vim和g++

我们通过创建一个hello.cpp程序,初步体验Ubuntu上的C++开发。

  1. 新建hello.cpp

    $ vim hello.cpp
    #include<iostream>
    using namespace std;
    int main(){
    	cout<<"hello"<<endl;
    	return 0;
    }
    
  2. 使用g++编译:

    $ g++ hello.cpp -o hello.out
    

    或者可以使用c++进行编译,这是不同于g++的另一种轻量级编译器Clang

    $ c++ hello.cpp -o hello.out
    

    此时文件夹下会出现高亮显示的hello.out文件,表明它是一个可执行文件

  3. 执行hello.out

    $ ./hello.out
    hello
    

补充:Clang

Clang是另一种较为常用的c++编译器,使用方法如下所示:

$ c++ -std=c++11 -g hello.cpp -o hello.o

测试gdb

上面的例子太简单,我们设置一个稍微复杂的例子:

问题:下面的RevertNum.c实现了对一个整型数字的反转,例如输入23,输出32,但是输入100时,结果却是010,请使用gdb调试发现问题并修改。

#include <stdio.h>
/*RevertNum.c*/
void ShowRevertNum(int iNum)
{
        while (iNum > 10)
        {
 				printf("%d", iNum % 10);
                iNum = iNum / 10;
        }
        printf("%d\n", iNum);
}
int main(void)
{
        int iNum;
        printf("Please input a number :");
        scanf("%d", &iNum);
        printf("After revert : ");
        ShowRevertNum(iNum);
}

首先,通过下面的命令编译cpp文件,注意一定要加上-g,打开编译选项!

gcc -g RevertNum.c -o revertnum.out

然后打开gdb开始调试revertnum.out

gdb revertnum.out

这里介绍常见的gdb命令:

Commandmeaning
file FILRNAME加载out文件
list (l)查看程序源码,可以加函数名,只显示某个特定的函数,一次只显示10行
break (b)设置断点,可以加函数名/行号
info break (i b)查看断点信息
next (n)单步调试,不进入函数
step (s)单步调试,进入函数
continue (c)程序继续运行,到下一断点处暂停
display可加变量名,显示变量的值
quit退出gdb调试

通过上面的介绍,不难发现问题出在第五行,将 >改成>=即可。

更多的GDB调试命令,可以参考博客

补充

Ubuntu命令

在这里插入图片描述

其中,pwd是print working directory的缩写,/代表root目录,~代表home目录。

经典的命令结构${PATH}/command [options] [parameters],当然也可以使用占位符(place holder),常见的占位符如下所示:

PlaceHolderMeaning
*Any set of characters,任意字符串
Any single character,任意单个字符
[a-f]在a,b,c,d,e,f中的任意字符
[^a-f]不在a,b,c,d,e,f中的任意字符

vim命令

在这里插入图片描述

gdb命令

在这里插入图片描述

google code style sheet

本教程采用了google code style sheet方法,详情见Google C++ Style Guide

More about c++

更多关于c++的官方说明,可以参考cppreference.com,该网站提供了中文版本。

Reference

[1] 更加深入的vim、cmake和gdb使用方法

[2] GDB 调试命令语句

[3] GDB调试 例子RevertNum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值