在linux环境下通过g++编译器和vim编辑器来编写程序,

介绍linux环境下g++编程和gdb调试以及makefile的编写。

vim helloworld.cpp

linux编译C++代码_linux

g++ -E helloworld.cpp >helloworld.i

通过执行上面的命令,输出预处理后的文件,如下面部分可以看到主要做宏的替换、注释的消除以及找到相关库文件。在该步骤不会进行语法错误检查。

cat helloworld.i |less

将预处理的文件转换成汇编语言,生成文件.s[编译器egcs]

g++ -S helloworld.cpp

linux编译C++代码_c++_02


3.汇编变为目标代码,生成.O文件

在该步骤进行词法和语法的检查,比如花括号不匹配,行末没有分号,关键字错误等。

g++ helloworld.cpp -o hello

linux编译C++代码_g++_03


gdb

当程序编译完成,需要对程序进行调试跟踪代码块的执行。gdb是GNU开发组织发布的一个强大的UNIX/Linux下的程序调试工具。主要有以下功能:

1.启动程序,可以按照用户自定义的要求运行程序。
2.可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。
3.当程序停住时,可以检查此时程序中所发生的事。
4.动态地改变程序的执行环境。

从功能上来看,gdb和一般的调试工具区别不大,可能习惯了图形化的调试工具暂时还不大习惯,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。­­­­­­­­­­­­­­­­­­­­­­­­­­­

g++ -g helloworld.cpp -o test
gdb test

l表示列出源码命令

l

linux编译C++代码_unix_04


break 4在源程序第4行设置断点

linux编译C++代码_c++_05


info break //显示断点信息Num Type Disp Enb Address What

linux编译C++代码_调试工具_06


r //运行程序,run命令简写Starting program

linux编译C++代码_c++_07


Breakpoint 1, main () at helloworld.cpp:16//在断点处停住6;

n //单条语句执行,next命令简写

linux编译C++代码_g++_08


(gdb) p i//打印变量result的值,print命令简写

linux编译C++代码_c++_09


linux编译C++代码_调试工具_10


bt查看函数堆栈

linux编译C++代码_unix_11

c //继续运行程序,continue命令简写。

linux编译C++代码_g++_12


q //退出gdb