20155209第二周课堂实践

第二周课堂实践

gdb测试

  1. 用gcc -g编译vi输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 首先下载安装gdb,本人使用Mac系统,安装过程如下:首先安装homebrew(macOS 缺失的软件包管理器),登陆homebrew官网

  • 将官网中的命令在命令行输入

  • 下载完成后在命令行输入

brew search gdb

查找是否有gdb安装包,如果没有输入

brew update

更新软件库。

  • 已有gdb安装包后输入
brew install gdb 

即可安装

  • 编写了一个带循环的代码,开始实现gdb调试。

  • 调试中发现run命令不能使用。出现Mac下的gdb签名错误。这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被恶意利用,它是默认禁止的。允许 gdb 控制其它进程最好的方法就是用系统信任的证书对它进行签名。

  • 开始创建证书:1,打开 Keychain Access 应用程序,执行菜单 钥匙串访问 -> 证书助理 -> 创建证书。2,填写证书信息,之后一路确定直到创建成功。3,在钥匙串访问程序中,选择左侧栏的系统和我的证书,找到你刚刚创建的gdb_codesign证书并双击打开证书信息窗口,展开信任项,设置使用此证书时:为始终信任。

  • 最后创建完成可以使用gdb了。

  • gdb调试截图:

静态库的测试

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 创建静态库:linux环境下使用ar工具创建一个静态库,或者将目标文件加入到一个已经存在的静态库中,其使用方法如下:
ar rcvs 静态库名 目标文件1 目标文件2 。。。。。。

故我创建静态库使用如下代码:

ar rcvs libmymath.a add.o sub.o mul.o div.o
  • 注意!:静态库的文件名命名规范是以lib为前缀,例如要创建静态库名为mymath.a,则静态库文件名应为libmymath.a。
  • 使用静态库:使用gcc的-l选项来指定静态库,或者使用-L参数来指定库文件的搜索路径。因此本例命令如下:
gcc main.c -o main -L. -lmymath
  • 成功截图如下:

共享库

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 创建动态库:由于动态库可以被多个进程共享加载,所以需要生成位置无关的目标文件。这时需要使用gcc编译器的-fPIC选项,该选项用于生成位置无关的代码。还需要使用-shared选项,该选项将位置无关的代码制作为动态库。本例命令如下:
gcc -fPIC -c add.c sub.c mul.c div.c
gcc -shared -o libmymath.so add.o sub.o mul.o div.o
  • 输入
gcc -o main main.c -L. -lmymath

命令使用共享库。

  • 成功截图如下:

makefile已提交蓝墨云。Myod由于十一回家时间冲突于下周完成。

posted @ 2017-09-30 11:22  林虹宇  阅读(138)  评论(1编辑  收藏  举报