本文共 895 字,大约阅读时间需要 2 分钟。
编译器:gcc/g++
通常我们所写的 C 语言程序,是一种高级语言,这些程序其实 cpu 是无法直接识别的,需要编译器,将我们所写的代码解释成为机器指令之后,才能执行编译过程:
预处理:展开所有代码 编译:进行语义语法检测,将 C 语言代码解释成为汇编代码 汇编:将汇编代码解释成为二进制机器指令 链接:将当前代码以及函数库还有其他文件代码打包生成可执行程序 函数库:将已经实现的代码打包生成一个文件——库文件(已经编译好的机器指令代码)调试器:gdb: 调试程序运行过程,查看程序出问题的位置
程序调试的前提:生成一个debug版的程序,程序中添加了调试符号的信息,然而Linux下gcc编译器,默认生成的是release版程序,不包含调试符号信息,无法调试,因此在编译程序的时候,需要增加gcc -g 选项,表示生成debug版程序。gcc 常见选项:
-E 当前gcc只完成预处理就会退出 -S 当前gcc只完成编译阶段就会退出 -c 当前gcc只完成汇编阶段就会退出 -o 用于指定要生成的目标文件名称 -g 生成debug版本程序开始调试命令:
run 程序直接开始运行 start 开始逐步调试调试的流程控制命令:
list: list filename:line 查看指定文件指定行附近的代码 step:下一步,若当前调试位置是一个函数,则会进入函数 next:下一步,直接运行这一行的函数 until:直接运行到指定文件的指定行 until filename:line continue:从当前位置继续运行断点相关命令:
break:在指定文件指定行打断点, break filename:line break function_name 在函数首行打断点 info break 查看断点信息 delete:删除断点 watch:变量监控,当变量内容发生变化则停下来 watch variable_name其他命令:
查看程序运行信息中的函数调用栈,快速定位程序崩溃位置,栈顶函数就是崩溃位置 backtrace quit:退出调试 print:打印变量信息转载地址:http://yhwzi.baihongyu.com/