linux c 编译与调试

c语言是跨平台的,但其在windows上编译的程序是不能够在linux平台上直接执行的,需要源代码在linux平台上重新编译。

gcc在编译一个程序时,一般需要完成预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)过程。

1、编译

gcc a.c          gcc a.c -o do

默认生成a.out可执行文件

2、给程序添加可执行权限

chmod +x a.out

3、执行程序

./a.out

4、查看编译过程

参数-v可以查看程序的编译过程和显示已经调用的库。

gcc -v a.c

设置编译的语言

-x 参数

cp a.c a.u

gcc -x ‘c‘ a.u

5、编译过程的控制

(1)控制预处理过程

gcc -E -o a.cxx a.c

将预处理的结果保存到a.cxx文件中

(2)生成汇编代码

gcc -S -o a.s a.c

生成汇编文件a.s

(3)生成目标代码

gcc -c -o a.o a.c

(4)链接生成可执行文件

gcc a.o -o aa.out

生成 可执行文件 aa.out

可用file命令查看文件信息,如

file aa.out

输出:

aa.out: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

6. gdb 调试程序

gdb是一个功能强大的调试工具,可以用来调试c/c++程序。

在使用gdb调试程序时,主要进行下面5个操作:

a. 启动程序

b.设置断点

c.查看信息

d.分步执行

e.改变环境

(1)在程序中加入调试信息

为了使用gdb调试程序,需要在编译程序的时候加入调试信息,方法是在编译时使用-g参数

gcc -g -o a.debug a.c

(2)在调试程序前,需要启动gdb。

直接输入gdb

在gdb中加载需要调试的程序

在(gdb)提示符后:

(gdb) file /home/bruce/c/a.debug

Reading symbols from /home/bruce/c/a.debug...done.

(3)在gdb中查看代码

可以用list命令显示程序的源代码和断点

e.g.

list 1   //显示第一个断点前的源代码

接着按“Enter"键,显示下一个断点以前的源代码

(4)在程序中加入断点

如果自动加入 的断点不能够满足调试要求,可以用break命令增加调试的断点。

e.g.

break 6

//在程序的第6行增加一个断点

(5)查看断点

命令info breakpoint 显示程序中所有设置的断点。

(gdb) info breakpoint

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0x080483ff in max at a.c:6

2       breakpoint     keep y   0x080483ff in max at a.c:6

3       breakpoint     keep y   0x08048412 in main at a.c:18

(gdb) break 19

Breakpoint 4 at 0x804841a: file a.c, line 19.

(gdb) info breakpoint

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0x080483ff in max at a.c:6

2       breakpoint     keep y   0x080483ff in max at a.c:6

3       breakpoint     keep y   0x08048412 in main at a.c:18

4       breakpoint     keep y   0x0804841a in main at a.c:19

(6)运行程序

run

程序会在第一个断点停下,输入next会进入下一行。

输入continue,则会在下一个断点处停下。

命令step也可以程序单步运行,其与next不同的时,当遇到一个函数调用,step可以进入函数内部,而next则会一步执行完函数调用。

(7)变量查看

print 命令可以在程序运行过程中查看一个变量的值。

gdb-> file a.debug -> run -> print i -> next -> print i

(8)退出

完成程序的调试后,输入 q ,退出gdb.

(9)gdb常用命令

省略..

时间: 2024-11-09 04:50:32

linux c 编译与调试的相关文章

5.2嵌入式linux程序编译与调试

实验二 嵌入式linux程序编译与调试 实验目的: 学会使用及配置vim 掌握gcc编译器使用 掌握使用Gdb单步调试程序的方法 实验要求: 熟悉使用该节所介绍的vim创建.编辑.保存文件. 分别用gcc实现预处理.编译.汇编.链接四个过程: 使用gcc编译多文件工程,并制作编译脚本. 利用Gdb单步调试修正结果错误的程序 实验步骤: 用gcc实现预处理.编译.汇编.链接四个过程,使用gcc编译多文件工程,并制作编译脚本. 1.gcc处理编译的四个过程 .源代码 ? (2).预处理 生成main

三、Linux下编译与调试

gcc/g++编译器 对于.c格式的C文件,可以采用gcc或g++编译 对于 .cc..cpp格式的C++文件,应该采用g++进行编译 常用的选项: -c  表示编译源文件 -o  表示输出目标文件 -g  表示在目标文件中产生调试信息,用于gdb调试 -D<宏定义> 编译时将宏定义传入进去 -Wall  打开所有类型的警告. 1. gcc编译过程:预编译->编译->汇编->链接 当我们进行编译的时候,要使用一系列的工具,我们称之为工具链. 其中包括:预处理器,编译,汇编器a

Hadoop源码编译与调试汇总

虽然在运行Hadoop的时候可以打印出大量的运行日志,但是很多时候只通过打印这些日志是不能很好地跟踪Hadoop各个模块的运行状况.这时候编译与调试Hadoop源码就得派上场了.这也就是今天本文需要讨论的. 先说说怎么编译Hadoop源码,本文主要介绍在Linux环境下用Maven来编译Hadoop.在编译Hadoop之前,我们需要准备好编译环境: 1.安装好1.6或以上的JDK;2.安装Maven,被做好相应的配置;3.安装ProtocolBuffer 2.5.0,MapReduce和HDFS

使用gcc编译gdb调试

gcc 在linux系统中,默认是没有安装gcc编译器的,可以通过命令 rpm -q | grep gcc 来查看.安装命令为: yum -y install gcc 安装后,编写一个.c结尾的文件. gcc test.c 就会默认输出一个a.out的输出文件,这个输出文件就是可执行文件. 如果加上-o选项,则可以自定目标文件. gcc -o test test.c test就是它的可执行文件. 一般都默认加上-Wall 选项,可以自动提示一些出错警告的信息. gcc -Wall -o test

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

[转载]linux下编译php中configure参数具体含义

编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php                      php 安装目录 –with-apxs2=/usr/local/apache/bin/apxs –with-config-file-path=/usr/local/php/etc      指定php.ini位置 –with-mysql=/usr/local

Linux驱动设计—— 驱动调试技术

参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942.html 对于驱动程序设计来说,核心问题之一就是如何完成调试.当前常用的驱动调试技术可分为: 1. 打印调试 printk 重定向控制台消息 消息记录 开启和关闭消息速度限制 打印设备编号 2. 调试器调试 gdb kdb内核调试器 kgdb补丁 3. 查询调试 使用/proc文件系统 ioctl方法 4.

Linux c c++ 开发调试技巧

看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Documentation, Inc. (SDI) 讨论几种可以帮助 C++ 开发人员节省时间的技巧和免费工具. C++ 开发人员在日常工作中通常要完成多个任务:开发新软件.调试其他人的代码.制订测试计划.为每个计划开发测试.管理衰退软件(regression suite)等等.在多种角色之间频繁转换会消

mysql在mac上的编译和调试

今天正式开始漫漫长路,打算这几年用业余时间刷刷mysql5.5源代码,由于手边的书籍基本都是基于mysql5.5的,所以就不用5.7版本的代码了,更何况我更关注基本内核.因此,没有特殊指明,那么,一般都指mysql5.5版本.工作原因没有深入去了解mysql,既然想玩技术,工作上的技术挑战没有研究mysql内核这么直接,因此,决定用业余时间搞搞些技术活,一方面可以让自己的技术深入储备,另一方面也让自己在工作之余从技术中获得点点成就感. 选择mac平台因为简单,windows平台我也编译成功了,但