Linux 调试c/c++程序小结

一:起因

(1)也许我们非常熟悉Windows下的VC6.0 和 CodeBlocks的调试工具 —— 界面化的调试,但是你是否想过你的每一个按键或者快捷键的背后指令是什么,让我们一起走进Linux的gcc动态调试工具GDB

(2)程序调试无非就是:debug(gcc -g -o target source);设置断点(b n);观察变脸(info locals);观察特定值(print expr);执行(start);执行下一行(next);进入子函数(step);执行到当前函数结尾(finish);查看源代码(list)等等操作

(3)gcc 的过程:C程序的编辑 用到vim;  程序的编译和运行用到gcc;  程序的调试用到gdb (kdbg是可视化的调试工具)

二:实例讲解

(1)调试步骤分为两步

   1)编译时一定到 加上 -g 产生调试信息,让调试信息包含在可执行文件中exe —— 命令行下:

        gcc -g -o target source

   2)把可执行文件exe加载到调试环境中:

      gdb target

   3) gdb为调试命令提示符,即可键入调试命令

(2)调试常用命令

   1)基本调试命令(重要)

list 行号:列出产品从第几行开始的源代码

list 函数名:列出某个函数的源代码

start:开始执行程序,停在main函数第一行语句前面等待命令

next(n):执行下一列语句

step(s):执行下一行语句,如果有函数调用则进入到函数中

breaktrace(或bt):查看各级函数调用及参数

frame(f) 帧编号:选择栈帧

info(i) locals:查看当前栈帧局部变量的值

finish:执行到当前函数返回,然后挺下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

set var:修改变量的值

quit:退出gdb

   2)高级调试命令

      break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

break...if...:设置条件断点

continue(或c):从当前位置开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

run(或r):从开始连续而非单步执行程序

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

3)格式化输入查看变量 print(p)

输出格式:

一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。

例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要

做到这样,你可以使用GDB的数据显示格式:

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十六进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

c 按字符格式显示变量。

f 按浮点数格式显示变量。

时间: 2024-10-07 19:20:13

Linux 调试c/c++程序小结的相关文章

在linux中如何调试C语言程序

在Linux下面可以使用下面几种形式对C语言进行调试: 1 gdb gdb program 这是最原始的调试方法,若非熟悉命令行,这种方式其实是比较麿人的.有兴趣的可以参考一些我之前的博文.http://www.cnblogs.com/tfanalysis/p/3543020.html 这里再附一图: 2 gdbtui gdbtui program 比gdb的方式更加友好一些,但也不大好用. 3 ddd 安装ddd之后运行 ddd program 4 nemiver 安装了nemiver之后运行

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver

转自:http://www.heimizhou.com/windows-remote-debug-linux-c-plus-plus.html 最近有一个需求,就是需要在Windows上远程调试Linux上的C++程序,然后我就从网上搜集各种方法,但是发现很多方法中是先在Windows上编译程序,然后再从Linux上编译程序,最后进行远程调试,这种方法使我的调试不能进入源代码,后来经过尝试发现只需要在Linux上编译程序即可.下面从三个方面:需要安装的软件.安装与配置.配置远程调试,来介绍一下我

linux C(hello world)程序调试

程序的调试(先得安装gdb工具,以root身份执行命令:sudo apt-get install gdb) 程序的调试是一个很重要的环节,windows IDE下那些强大的调试功能,Linux以什么来对比呢,当然,在我看来,无所不能的linux一样可以胜任调试工作,有过之而无不及,那就是安装开发工具后,另一个集成于linux中的工具,gdb.它是一款由GNU组织开发并发布的UNIX/Linux下的程序调试工具,虽然它没有图形化的友好界面,但是它功能异常强大,足以和其他一些商业化的IDE环境相媲美

掌握 Linux 调试技术

掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best ([email protected])JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起. 本文讨论了四种调试 Linux 程序的情况.在第 1 种情况中,我们

iSensor APP 之 摄像头调试 MT9D001 MT9P031 测试小结 200万像素和500万像素摄像头

iSensor APP 之 摄像头调试  MT9D001 MT9P031 测试小结 iSensor app 非常适合调试各种摄像头,已测试通过的sensor有: l  OV7670.OV7725.OV9650.OV9655.OV9653.OV5642.OV5640.OV5620 l  MT9T001.MT9M001.MT9P031.MT9V032.MT9V034.MT9D001.MT9D112.MT9D111 等 今天又重新测试了下MT9D001C12STC,MT9P031C12STC特此留下文

掌握 Linux 调试技术【转】

转自:https://www.ibm.com/developerworks/cn/linux/sdk/l-debug/index.html 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问题的情况,这些问题包括段错误,内存溢出和泄漏,还有挂起. 2 评论 Steve Best ([email protected])JFS 核心小组成员,IBM 2

Linux调试分析诊断利器——strace

strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序. 在Linux系统中,用户程序运行在一个沙箱(sandbox)里,用户进程不能直接访问计算机硬件设备.当进程需要访问硬件设备(如读取磁盘文件或接收网络数据等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备.strace可跟踪进程产生的系统调用,包括参数.返回值和执行所消耗的时间.若strace没有任何输出,并不

Eclipse+CDT+GDB调试android NDK程序(转)

Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实实现过.但是性能实在太低,卡的根本没法用.Linux下直接用gdb调试本地方法是很流畅的. 再确定安装并配置好开发环境之后,就可以开始了.