20155209第二周课堂实践

第二周课堂实践

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

  • 将官网中的命令在命令行输入
  • 下载完成后在命令行输入
brew search gdb

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

brew update

更新软件库。

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

即可安装

  • 编写了一个带循环的代码,开始实现gdb调试。
  • 1071485-20170930112134434-896617402.png

  • 调试中发现run命令不能使用。出现Mac下的gdb签名错误。这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被恶意利用,它是默认禁止的。允许 gdb 控制其它进程最好的方法就是用系统信任的证书对它进行签名。
  • 开始创建证书:1,打开 Keychain Access 应用程序,执行菜单 钥匙串访问 -> 证书助理 -> 创建证书。2,填写证书信息,之后一路确定直到创建成功。3,在钥匙串访问程序中,选择左侧栏的系统和我的证书,找到你刚刚创建的gdb_codesign证书并双击打开证书信息窗口,展开信任项,设置使用此证书时:为始终信任。
  • 最后创建完成可以使用gdb了。
  • 1071485-20170930112140997-1415550575.png

  • gdb调试截图:
  • 1071485-20170930112148215-1938595302.png

静态库的测试
  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
  • 成功截图如下:1071485-20170930112159497-1400340852.png
共享库
  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

命令使用共享库。

  • 成功截图如下:1071485-20170930112205356-1216535103.png

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

转载于:https://www.cnblogs.com/lhyhahaha/p/7614264.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值