zoukankan      html  css  js  c++  java
  • 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由于十一回家时间冲突于下周完成。

  • 相关阅读:
    关于抑或
    【vue】条件渲染 v-if v-else
    【vue】vue的目录结构、项目流程、vue-router
    【vue】在vue中引入iview
    【vue】vue如何创建一个项目
    【jquery】jquery怎么实现点击一个按钮控制一个div的显示和隐藏
    【angularjs】ng-model controller中取不到值(input)
    打印机增强软件pdfpro
    vagrant 安装ubuntu12.04 64 bit
    debian 7 stable 不能编译android源码
  • 原文地址:https://www.cnblogs.com/lhyhahaha/p/7614264.html
Copyright © 2011-2022 走看看