• 【代码执行以及调试】


    linux执行代码

    一步执行

    一步编译:
    gcc -o 可执行文件名 依赖的所有.c文件
    例:gcc -o main main.c
    执行可执行程序:
    路径+文件名 路径(相对 绝对)
    例:./main /home/stu main
    编译阶段在linux操作系统下堆文件名后缀无要求,但编译程序在依赖的文件后加.c是因为gcc编译器要求的.c结尾才可以编译

    很显然我们写一下小项目时有必然存在.h文件,我们有需要如何执行呢?
    我们执行的.c文件中的引入我们自己编写的头文件.h文件即可,紧接着正常编译.c文件并执行。
    演示:在这里插入图片描述

    拓展问题

    1、那我们如何直接执行可执行文件呢,例如演示的代码中执行main文件需要在前加入路径,如何不加路径可以执行文件呢?
    我们可以想一下为什么命令可以直接执行,例如:ls cd pwd 等一系列命令可以直接执行,不需要加入其路径。我们知道bin文件中是命令文件,可以查看到bin文件中全是命令,所以我们只需要将main文件移动到bin文件中,便可以直接执行main文件。(移动至bin路径需要管理员权限,移动后记得移动回原位置)
    移动操作命令:sudo mv ./main /bin/
    在这里插入图片描述
    2、上面的演示代码中,我们可以看到.c文件中引入.h文件时,用的是双引号“”,能不能用<>代替呢,为什么?
    我们知道<>是在库中查找的文件,“”是自定义的文件,会在当前目录下寻找该文件。为此我们如果要将其改为<>,需要将文件移动到库文件中。
    命令:sudo mv /usr/include/add.h ./
    同样运行之后需要移动回来,***如果移动的文件名同库文件中的文件名相同,移动文件便会将两文件合并。

    文件多次编译执行

    汇编链接原理:在这里插入图片描述
    三次编译的过程:
    预编译:处理预编译指令,展开宏定义,删除注释。
    编译阶段:语法,词法分析,代码优化汇总符号。
    汇编阶段:翻译成二进制,生成各个段,生成符号表。
    链接阶段:合并各个段,符号解析,符号重定位。

    文件编译流程:
    在这里插入图片描述

    逻辑调试

    linux调试时需要进行版本的切换,调试需要从发行版本(release)切换到调试版本(debug),
    命令:gcc -o main main.c -g (debug模式储存)。
    调试步骤:
    1.gcc -o main main.c -g //切换debug
    2.启动调试:gdb main //调试可执行程序,–>安装gdb -->sudo apt install gcc.
    3.出现(gdb)提示符出现即可输入命令 ,启动调试。
    gdb调试:
    调试重点操作:
    下断点:b+行数 例如(b 9在第九行下断点)
    显示函数:l 本身显示行数,l+行数 (l 9 显示第九行左右的代码)
    显示断点:info b(显示断点信息)
    单步执行:n
    运行程序:r
    实时查看当前变量的信息:p +变量,
    删除断点:delete 断点号
    显示文件行数源代码:list+val:num(显示val文件num行上线源代码)
    继续执行到下一个断点处:c(continue)
    进入将要被调用的函数:s
    跳出函数:s
    退出调试:q
    打印变量的值:p+ val

  • 相关阅读:
    phpstrom设置注释
    mini-imagenet数据集下载-阿里云网盘不限速下载
    Mac M1下使用Colima替代docker desktop搭建云原生环境
    智慧城市数字孪生技术方案,建设可视化系统
    shiro-登录验证
    父组件调用子组件中的方法(vue2)
    6.19作业
    JAVA12_05学习总结(JDBC!)
    vue2+若依框架plus交互 路由介绍
    python+nodejs+vue教材征订管理系统
  • 原文地址:https://blog.csdn.net/m0_56246173/article/details/127551307