• 2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结


    2018-2019-1 20165228 《信息安全系统设计基础》第一周学习总结

    教材学习内容总结

    GCC编译:

    • 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
    • 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
    • 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
    • 链 接:gcc hello.o –o hello ;gcc -o 调用ld
    • 带head.h的头文件编译:需要使用"-I + 头文件路径"
      例:gcc -I include src/*.c -o bin/xx

    注意使用GCC编译时要加“-g”参数

    GDB基本命令

    • gdb programm(启动GDB)
    • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    • run 开始运行程序
    • bt 打印函数调用堆栈
    • p 查看变量值
    • c 从当前断点继续运行到下一个断点
    • n 单步运行
    • s 单步运行
    • quit 退出GDB
    • 大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
    • 断点调试:
      break x (x表示设置断点位置的行号)
      delete x (x表示删除断点的行号)
      list 显示带行数的代码
      start+cotinue=run 运行
      s+c=r
      watch b 观察变量b的值,变化时程序停止
      s 进入函数内部
      n 单步调试
      quit 退出gdb
      info b 查看断点信息并保存
      save breakpoint fig.dp 保存断点到fig.dp中
      gdb hello2 -x fig.dp 调试时读取保存断点文件

    静态库的生成

    例:
    1、输入 "gcc (-g) -c -I/头文件所在路径 add.c sub.c mul.c div.c" 生成.o文件
    2、输入 "ar rcvs libmath.a add.o sub.o mul.o div.o"生成静态库
    3、输入 "gcc (-g) main.c -o main -I/头文件所在路径 -L. -lmath" 生成可执行文件main

    注意: -I参数用来指定程序要链接的库,-I参数紧接着就是库名

    -L参数跟着的是库文件所在的目录名

    gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到静态库文件名来查找静态库文件

    动态库的生成

    例:
    1、输入 "gcc (-g) -fPIC -c -I/头文件所在路径 add.c sub.c mul.c div.c" 生成.o文件
    2、输入 "gcc -shared -o libmath.so add.o sub.o mul.o div.o"生成动态库
    3、将文件libmath.so复制到目录/usr/lib中后,再输入"gcc (-g) main.c -o main -I/头文件所在路径 -L. -lmath"生成可执行文件main

    Makefile文件的书写格式:

      vim Makefile
    

      文件类型:由哪个文件得到
      得到过程
      例如:

      main:main.o //可执行文件main是由目标文件main.o得到。
      gcc main.o –o main //得到过程是将main.o编译成main文件。
      main.o:main.c
      gcc -c main.c -o main.o
    

      在Makefile文件中一定要将每一个.c文件按执行顺序先编译成.o文件,再按顺序将.o文件编译成可执行文件。
      每次编译过后会产生很多的.o文件,对于程序运行没什么太大意义,反而会占内存,所以我们也可以在Makefile文件中添加清除命令(clean),如:
         .PHONY:clean   
      clean: 删除所有文件类型为.o的文件
      ```
    rm –rf *.o

      编译和执行(make:编译, 。/all:执行)
    ## 代码调试中的问题和解决过程
    - 问题1:在编译时,报错"ld returned 1 exit status"
    - 问题1解决方案:在查找资料后,指示编译方式或编译指令有误。最后发现是指令中的I与小写L混淆了。
    - 问题2:在做测试的时候,不会使用GDB设置断点
    - 问题2解决方案:在参考[linux c之gdb常用断点调试总结](https://blog.csdn.net/u011068702/article/details/53931648),学习了(条件)断点的设置和保存,以及一些简单的GDB指令。
    - 问题3:GDB调试问题“No source file named file.c. Make breakpoint pending on future shared library load?”和“没有符号表被读取。请使用"file" 命令”
    - 问题3解决方案:在编译的时候,没有加-g的选项,导致没有产生调试符号。
    
    ## [代码托管](https://gitee.com/BESTI-IS-JAVA-2018/20165228szkun_java.git)
    ![](https://img2018.cnblogs.com/blog/1269550/201809/1269550-20180923195237717-664899029.png)
    
    
    (statistics.sh脚本的运行结果截图)
    
    ## 其他(感悟、思考等,可选)
    	在学习本门课程的第一周,就对忘了很多的C语言进行了深入的学习。比如编译这一步骤,之前只会用codeblock等点一下就编译了,而没想过中间还需要预处理等步骤,最后还要链接可执行程序。让我有了很大的收获,尤其是刚刚学习的静态库、动态库,让我对C有了新的认识。在这之前,我对Makefile一点认识都没有,在编写Makefile时遇到了一些困难,不论是格式还是编写规则,都是十分新鲜的事物。
    
    ## 学习进度条
    
    |            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
    | --------   | :----------------:|:----------------:|:---------------:  |:-----:|
    | 目标        | 5000行            |   30篇           | 400小时            |       |
    | 第一周      | 124/124            |   1/1            | 9/9             |       
    
    - 计划学习时间:5小时
    
    - 实际学习时间:9小时
  • 相关阅读:
    C 语言
    How does Chrome Extension crx Downloader work? ——— From crxdown.com
    做作业时看到的 Demo
    IDEA 插件收集
    [E] Shiro 官方文档阅读笔记 The Reading Notes of Shiro's Offical Docs
    烦人的 Python 依赖
    机器学习之路--Numpy
    机器学习之路--朴素贝叶斯
    机器学习之路--决策树
    机器学习之路--KNN算法
  • 原文地址:https://www.cnblogs.com/cloud795/p/9693577.html
Copyright © 2020-2023  润新知