gdb和g++的简单使用

来源:互联网 发布:淘宝模特培训 编辑:程序博客网 时间:2024/05/29 16:02

在编译之前我们需要在系统里安装G++ GCC,它们就是Linux下的C++/C的编译器。

代码如下

sudo apt-get install build-essential


好,现在我们在文本编辑器里写一个简单的C程序(好像所有学习C或者C++的书都会出现):
 
include <stdio.h>

int main()
{
    printf("Hello,World!\n");
    return 0;
}


现在存到目录为Hello.c,打开你的终端,并在文件当前目录输入:

gcc Hello.c -o hello 


编译时可能会出现如下警告:no newline at and of file,只有在文件结尾添加一个新行就好了。
然后在终端中输入 ./hello ,你就能在终端中看到程序运行结果了。

下面来说下C++是如何编译的 
#include <iostream>


using namespace std;


int main()
{
    cout<<"Hello,World!\n"<<endl;
    return 0;
}


存目录为Hello.cpp
使用gcc编译???不对,这里我们使用g++来编译C++程序

g++ Hello.cpp -o hello



编译多个文件我们怎么办???来看下面出了三个文件Hello.h, Hello.cpp, MyFirst.cpp

//file_NO1:Hello.h
class Hello

{

public:
     Hello();
     void Display();
};


//file_NO2:Hello.cpp
#include <iostream>
#include "Hello.h"


using namespace std;


Hello::Hello()
{
}
void Hello::Display()
{
    cout<<"Hello,World!\n"<<endl;
}


//file_NO3:MyFirst.cpp
#include <iostram>
#include "Hello.cpp"

using namespace std;


int main()
{
    Hello theHello;
    theHello->Display();
    return 0;
}


g++中有一个参数-c可以只编译不连接,那么我们就可以按如下顺序编译文件

g++ -c Hello.cpp -o Hello.o
g++ -c MyFirst.cpp -o MyFirst.o
g++ MyFirst.o hello.o -o MyFirst


你是否会问,如果是一个项目的话,可能会有上百个文件,这样的编译法,人不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发都白了,呵呵,所以我们要把上述的编译过程写进以下一个文本文件中:
Linux
下称之为makefile
[code]
#
这里可以写一些文件的说明
MyFirst: MyFirst.o hello.o
g++ MyFirst.o hello.o -o MyFirst
Hello.o:Hello.cpp
g++ -c Hello.cpp -o Hello.o
MyFirst.o:MyFirst.cpp
g++ -c MyFirst.cpp -o MyFirst.o
[code]


存目录为MyFirst,在终端输入:make MyFist

 

gdb调试器是Linux系统自带的,他可以让你观察另一个程序在执行时的内部活动,或程序出错时发生了什么。

程序出现了错误可是所有程序员共同的敌人,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序进行必要的调试是一个好主意,那我们怎么来调试程序呢,看下面:
在这里我修改下,要想下面可以调试,在上面编译的时候必须加上参数 -gg++ -g hello.cpp -o hello

1)编译调试程序。将多个源文件编译连接成一个可执行文件

$gcc  -g  hello.c   -o  hello

2 ) 启动gdb调试。再对可执行文件用gdb进行调试

$gdb    ./文件名       如$gdb ./hello

 

以下为调试状态下的可以用到的命令(也可以仅输入命令的首字母,如break可简为b),尖括号中为说明
list              <
显示源代码>
break
行号    <设置断点>
run             < (设好断点后)
运行程序 >
continue     <
继续从断点处执行>
print 
变量    <调试时查看变量的值>

until            <结束当前循环> 

watch          <在程序中设置一个监测点>
delete 
行号   <删除一个断点或监测点>


step              <
单步执行,可跟踪到函数内部>

finish                < 如果已经进入了某函数,而想退出该函数返回到它的调用函数,可使用该命令>
next              <
单步执行,不可跟踪到函数内部>

whatis  变量或函数    <显示某个变量或函数的类型>

jump                     < 在源程序中的另一点开始运行>

set   variable       < 给变量赋值>

info source     <得知当前文件的绝对路径>
quit                <
退出>

break命令设置断点有如下四种形式:

1、(gdb)break    要指定的行

2、(gdb)break    要指定的函数名

3、(gdb)break    要指定的行或函数名      if  条件

4、(gdb)break    要指定的例程routine_name的入口处

如果该程序是由很多源文件构成的,你可以在各个源文件中设置断点,而不是在当前的源文件中设置断点,其方法如下:

(gdb)break     文件名:行号

(gdb)break     文件名:函数名

 

要设置一个条件断点,可以利用break   if  命令,如果条件是真,则设置断点如下所示:

(gdb)break    行或函数名      if    条件

例:

(gdb)break    46  if  testsize == 100

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一键ghost断电了怎么办 如何防止cpu降频怎么办 win7 64位系统不兼容怎么办 网页无法加载打印机插件怎么办 微信提示安装了插件怎么办 电脑上不了网怎么办 win10 win10电脑突然没网了怎么办 笔记本玩战争前线发热严重怎么办 玩战争前线总是闪退怎么办 uu加速器卡在29怎么办 新ipad下载不了东西怎么办 福昕pdf阅读器找不到图章怎么办 战地4没达到分数怎么办 植物在太暗环境怎么办 玩绝地求生机型不支持怎么办 安卓安装包损坏怎么办 方舟手游安装包损坏怎么办 7p新机耗电快怎么办 不小心把图片删了怎么办 腿上毛又长又多怎么办 征兵体检体重太轻怎么办 体检发现颈部有淋巴节怎么办? 4岁宝宝汗毛重怎么办 嘴巴张开闭不上怎么办 口张开闭不上怎么办 要去当兵有痔疮怎么办 狗舔的东西吃了怎么办 婚检说生过孩子怎么办 劳动法规定身体有疾病的怎么办 铁路对职工醉驾怎么办 入职体检高血糖怎么办 睾丸捏一下很疼怎么办 小孩睾丸受外力红肿该怎么办 睾丸炎症怎么办啊会不会不育呢 腰疼连着睾丸疼怎么办 为什么结石会睾丸疼怎么办 感觉自己睾丸变小了怎么办 宝宝小丁丁肿了怎么办 两岁宝宝高低肩怎么办 参军体检视力不过关怎么办 验兵视力不过关怎么办