Linux下多文件链接执行及调试技术

本文介绍了在Linux环境下,如何进行多文件链接,包括一般方法和使用makefile的方法,并详细讲解了程序调试,包括gdb的安装、调试命令及调试流程,帮助开发者掌握Linux下的程序构建和调试技巧。

一、多文件链接的方法

1.多文件链接的一般方法

  1. 给出所要调用的函数声明及实现方法
cat max.h
int max(int x,int y);    //max函数的声明

cat max.c
#include"max.h"
int max(int x,int y)
{
	return x>y?x:y;
}                         //max函数的实现方法

cat add.h
int add(int x,int y);    //add函数的声明

cat add.c
#include"add.h"
int add(int x,int y)
{
	return x+y; 
}                        //add函数的实现方法
  1. 将写好的.c文件编译成.o文件
gcc -c max.c
gcc -c add.c   //用这两个命令将两个.c文件编译成.o文件

此时的两个程序不能单独链接成可执行文件,因为可执行文件需要主函数。

  1. 写出需要调用上面两函数的程序
cat main.c
#include<stdio.h>
#include"add.h"
#include"max.h"
int main()
{
	int a=2,b=3;
	printf("add=%d\n",add(a,b));
	printf("max=%d\n",max(a,b));
	return 0;
}                             //主程序
gcc -c main.c                //将main.c文件编译成main.o文件;      
  1. 将所有就绪的.o文件连接成可执行的main程序
gcc -o main.o max.o add.o   //此命令将所有就绪的.o文件连接成可执行的main程序
  1. 执行main程序
./main     //此命令执行main程序

2.多文件链接的makefile方法

Makefile是用来管理工程,实现自动化编译的工具,和VS中的程序的编译执行是对应的。

makefile文件的写法:
注意: gcc 前面必须是 table 建缩进
在这里插入图片描述
make 命令根据 makefile 文件的规则生成可执行程序
在这里插入图片描述

二、调试

程序运行时有两个版本:

  • Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人
    员,最常用的就是 debug 版本的可执行文件。
  • Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版
    本。

我们调试的是一个可以执行的程序。调试的命令为gdb。

1.安装gdb的命令:

sudo apt install gdb

2.单进程、单线程基础调试命令

 - l               //显示 main 函数所在的文件的源代码
 - list 文件名:num //显示 filename 文件 num 行上下的源代码
 - b 行号          //给指定行添加断点
 - b 函数名        //给指点函数的第一有效行添加一个断点
 - info break      //显示断点信息
 - delete 断点号   //删除指定断点
 - disable 断点号  //将断点设定为无效的,不加断点号,将所有断点设置为无效
 - enable 断点号   //将断点设定为有效的,不加断点号,将所有断点设置为有效
 - r(run)        //运行程序
 - n(next)      //单步执行
 - c (continue//继续执行,直接执行到下一个断点处
 - s              //进入将要被调用的函数中执行
 - finish         //跳出函数
 - q              //退出调试
 - p val          //打印变量 val 的值
 - p &val         //打印变量 val 的地址
 - p a+b          //打印表达式的值
 - p arr(数组名)//打印数组所有元素的值
 - p *parr@len    //用指向数组的指针打印数组所有元素的值
 - display        //自动显示,参数和 p 命令一样
 - info display   //显示自动显示信息
 - undisplay + 编号 //删除指定的自动显示
 - ptype val      //显示变量类型
 - bt             //显示函数调用栈

3.基础调试

在Linux系统下,我们编译程序时,默认是Release 版本,切换到Debug 版本是需要加入参数的。
在这里插入图片描述
以下给出常用命令的示例:

  • gdb +文件名,开始调试程序
    在这里插入图片描述

  • L是显示命令,一般默认显示10行,程序太长时,接着使用L命令会接着上一次的显示。
    在这里插入图片描述

  • b加断点:b+数字表示在第几行加断点。info break是显示断点信息。
    在这里插入图片描述

  • r是执行程序。如图程序执行时停在11行断点处。
    在这里插入图片描述

  • c是从上一个断点处开始执行,执行到下一个断点处停下。
    在这里插入图片描述

  • n是单步执行程序,p是打印。
    在这里插入图片描述

  • finish结束调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值