咸阳建设局网站,360建筑网广州八臂猿李工,免费精准客源,财务软件哪里买G重要编译参数 -g#xff08;GDB调试#xff09; -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息#xff0c;以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程#xff1a; -E#xff08;预处理#xff09; g -E hello.c -o hello.i-S#xff08;编… G重要编译参数 -gGDB调试 -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程 -E预处理 g -E hello.c -o hello.i-S编译 g -S hello.i -o hello.s-c汇编 g -c hello.s -o hello.o链接 g hello.o -o hello-O[n] 优化源代码-O0表示不做优化-O1为默认优化-O2除了完成-O1的优化之外还进行一些额外的优化工作如指令调整等一般使用这个即可满足要求g -O2 hello.c -o hellotime time ./hello 可以带引该可执行文件的执行时间-l指定库文件、-L指定库文件路径 在/lib、/usr/lib及/usr/local/lib里的库直接-l参数就能链接 例链接glog库 g -lglog hello.c -o hello如果库文件没放在以上三个目录里需要使用-L参数指定库文件所在目录 例 g -L/home/wangxianyue/hellolibfolder -lhello hello.c -o hello-I指定头文件搜索目录 /usr/include一般是不用指定的gcc知道去但如果头文件不在这里就需要使用-I参数进行指定了。 例头文件放在当前目录中 g -ImyInclude hello.c -o hello-Wall打印警告信息 g -Wall hello.c -o hello-w关闭打印信息 g -w hello.c -o hello-stdc11设置编译标准 g -stdc11 hello.cpp -o hello-o指定输出文件名 g hello.c -o hello-D定义宏 g -DDEBUG hello.c -o hello g命令行编译命令实战 -I命令直接编译生成库文件并编译 1. 生成静态库编译时链接 步骤1先进入src目录下步骤2先生成.o的汇编文件步骤3生成静态库libSwap.a步骤4回到上级目录步骤5链接生成可执行文件static_main-l会自动省略lib及.a故直接输入-lSwap即可步骤6运行static_main即可./static_main生成动态库运行时链接 步骤1进入src目录下步骤2生成动态库libSwap.so步骤3回到上级目录步骤4链接生成可执行文件dynamic_main步骤5运行 常用调试命令参数 GDB调试器 用来调试C/C程序的功能强大的调试器是linxu系统开发C/C最常用的调试工具程序员可以使用GDB来跟踪程序中的错误从而减少程序员的工作量linxu开发C/C一定要熟悉GDBVScode是通过调用GDB调试器来实现C/C的调试工作的Windows系统中常用的集成开发环境IDE如VSVC等他们内部已经嵌套了相应的调试器GDB主要功能 设置断点断点可以使条件表达式使程序在指定的代码上暂停执行便于观察单步执行程序便于调试查看程序中变量值的变化动态改变程序的执行环境分析崩溃程序产生的core文件常用调试命令参数 调试开始执行gdb exefilename进入gdb调试工具其中exefilename为要调试的可执行文件名参数 helph查看命令帮助具体命令查询在gdb中输入help 命令runr重新开始运行文件start单步执行运行程序停在第一行执行语句listl查看源代码list n从第n行开始查看代码list 函数名查看具体函数set设置变量的值nextn单步调试逐过程函数直接执行steps单步调试逐语句跳入自定义函数内部执行backtracebt查看函数的调用的栈帧和层级关系framef切换函数的栈帧infoi查看函数内部局部变量的数值finish结束当前函数返回到函数调用点continuec继续执行跳到下一个断点printp打印值及地址quitq退出调试breaknumb在第num行设置断点info breakpoints查看当前设置的所有断点delete breakpoints numd删除第num个断点display追踪查看具体变量值undisplay取消追踪观察变量watch被设置观察点的变量发生修改时打印显示i watch显示观察点enable breakpoints启用断点disable breakpoints禁用断点x查看内存run argv[1] argv[2]调试时命令行传参set follow-fork-mode child#Makefile项目管理选择跟踪父子进程forkTips 编译程序时需要加上-g参数之后才能进行gdb调试gcc -g hello.c -o hello回车键重复上一命令