Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)
来源:互联网 发布:无法打开数据库msdb 编辑:程序博客网 时间:2024/05/22 10:55
在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试。本文主要介绍调试C/C++在Linux操作系统下主要的调试工具。
在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具。
分以下几个内容介绍:
1、调试之前的工作
2、选择调试工具
3、调试步骤
调试之前的工作
编译器在编译阶段需要产生可供调试的代码,才能被调试器调试。可以如下做:
- gcc -g -ggdb ./yourcode.c -o yourapp.exe
这样编译代码可以产生供gdb调试的符号信息。
选择调试工具
gdb当时我们要使用的调试工具,不过他是命令行中使用的,多少有点不方便。
CGDB和DDD都是基于GDB开发的,他们只是增加了更加容易交互的界面。其中CGDB也是在命令行中使用的,使用方式与GDB一样,只是增加了代码显示的界面。
DDD也是GNU开发的,他也是基于GDB的,只是使用了可视化界面,比CGDB更加容易操作。
在有些情况下,我的Linux上可能没有装X-Sever,这样就没有图形显示功能,此时我们只能用命令行方式使用调试工具,所以gdb和cgdb应用更广泛些。一般我会使用CGDB,他的操作跟gdb完全类似,很容易上手。
调试
使用下面的命令启动程序。
- cgdb ./youapp.exe
注意,这里我们使用的是cgdb,如果你没有安装cgdb,首先应该安装它!ubuntu用户的安装方式如下:
- sudo apt-get install cgdb
启动软件后,常用的几个命令因该熟练掌握:
1、设置断点命令,程序在执行时遇到断点会停下来,执行停止后可以进行变量值的检查。
- break [line_number]
例如:break youcode.cpp:32,这个命令是说在youcode.cpp第32行代码处设置断点,程序运行至此时会停下来。
2、显示变量的值,程序在断点处停止时可以打印变量的值。
- print [var]
例如:print a,这句命令表示打印变量a的值。print也可以缩写成p。
3、单步执行,程序在断点处停止后,使用单步调试命令让程序一步步往下执行。使用next命令可以完成这个任务,可以缩写为n。
4、进入内部,在调试过程中,如果想进入某个函数的内部,则可使用step命令。
5、继续执行到下一个断点处。使用continue命令可以完成这个任务。
以上命令是gdb调试时常用的命令,也是应该必须掌握的命令。如果你想知道更多如何使用这些命令,使用help command查看相关的帮助。
- Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)
- Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)
- Linux下的c/c++程序调试利器-----gdb/cgdb
- Linux下编译调试C程序(GCC,GDB)
- linux下 gcc,gdb 运行和调试c程序
- Linux下的简单C程序gcc编译、gdb调试。
- GDB、DDD-linux下程序调试
- linux下的gdb调试(调试c程序)
- linux下c程序编译过程及GCC,G++, GDB简介
- linux 下 gdb 调试c/c++ 程序
- linux下用gdb调试c程序
- linux下gdb调试C程序
- linux下gdb调试c语言程序
- linux下用gdb调试c程序
- Linux 下 C 编译gcc与调试gdb工具介绍
- gdb 调试linux c程序
- windows下建立gcc/g++/gdb/make编译及调试C/C++的IDE环境
- windows下建立gcc/g++/gdb/make编译及调试C/C++的IDE环境
- JAVA几种日志组件的兼容
- 我的WCF之旅(2):Endpoint Overview
- Android framework系统默认设置修改
- 简介ImageLoader(二)
- springMVC 4.0 集成 quartz 2.2实例
- Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)
- Nginx Mac OX上安装
- long and int
- Spring+mabatis配置文件
- iOS原生二维码扫描
- MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用
- linux 系统命令
- screen使用问题,重新attach失败:There is no screen to be resumed matching ***
- 关于linux suse 系统配置ssh防火墙ip规则