1. 实验记录

任务一:

①、进入文件路径,用第一种方式编译生成可执行文件firstCompile.exe。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

②、将三个函数文件编译成.o文件。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

③、将三个函数的.o中间文件分别打包生成静态库。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

④、使用静态链接库的方式编译生成可执行文件secondCompile.exe。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

⑤、将三个函数文件编译打包生成共享库。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

⑥、用动态链接库的方式编译生成可执行文件thirdCompile.exe。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

 

任务二:

①、进入调试。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

②、查看代码,打断点,单步调试,进入calc函数。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

③、打断点,一步一步查看iOut的值。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

最终得出iOut的值依次为:0 10 110 1210 13310 146410 1610510 17715610 194871710 2143588810 2104640430

1676208250 由此可见,发生了数据溢出。

 

任务三:

①、Makefile文件编写。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

②、Makefile运行文件测试如下。

西南科技大学Linux实验名称:实验四 Linux环境C程序开发工具使用

 

2. 思考题回答

1、源代码级别的调试和二进制级别的调试有什么区别?

答:多数源代码使用的语言是高级语言,二进制级别的程序可以理解为一条条的机器指令,一句高级语言翻译成机器指令可能会有很多条。源代码调试的对象是一句句高级语言(多条机器指令的集合)。二进制调试的对象是一句句机器指令,是底层的调试,可以直观知道每个寄存器的数据变化。可以理解为源代码调试没有二进制调试细微化。

3. 实验体会

答:

        通过本实验我初步学会了C/C++语言源代码在linux环境下的编译和调试。

       编译过程是一个将源代码转换为可执行文件的过程,在这个过程中需要处理各种依赖问题,实验中编译涉及了三种编译操作方式,其总可归于动态编译和静态编译,动态编译是gcc默认的编译方式,静态编译需要用参数强制指定。动态编译的程序占用内存会小一点,而静态编译的程序占用内存会更大。在编译操作中涉及到了makefile的编写,make操作在不指定makefile文件名时,它默认的搜索次序为GNUmakefile、makefile、Makefile,这是一个需要注意的点。在gdb程序实验中使用到了单步调试、打断点等gdb操作,由实验给出的源代码编译的程序经调试发现存在数据溢出的问题。

相关文章:

  • 2021-09-03
  • 2021-08-03
  • 2021-08-09
  • 2021-04-06
  • 2021-07-10
  • 2021-07-01
  • 2021-11-23
  • 2021-12-10
猜你喜欢
  • 2021-10-02
  • 2021-09-23
  • 2021-06-26
  • 2022-01-02
  • 2021-12-09
  • 2021-11-07
相关资源
相似解决方案