技术开发站45793.com
Linux--学习记录(3)
发布时间:
2023年12月19日
G++重要编译参数
-g(GDB调试)
-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 hello
time
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
-std=c++11(设置编译标准)
g++ -std=c++11 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++一定要熟悉GDB
VScode是通过调用GDB调试器来实现C/C++的调试工作的
Windows系统中,常用的集成开发环境(IDE),如VS,VC等,他们内部已经嵌套了相应的调试器
GDB主要功能:
设置断点(断点可以使条件表达式)
使程序在指定的代码上暂停执行,便于观察
单步执行程序,便于调试
查看程序中变量值的变化
动态改变程序的执行环境
分析崩溃程序产生的core文件
常用调试命令参数
调试开始:执行gdb exefilename,进入gdb调试工具,其中exefilename为要调试的可执行文件名
参数
help(h):查看命令帮助,具体命令查询在gdb中输入help + 命令
run(r):重新开始运行文件
start:单步执行,运行程序,停在第一行执行语句
list(l):查看源代码,(list n:从第n行开始查看代码;list 函数名:查看具体函数)
set:设置变量的值
next(n):单步调试(逐过程,函数直接执行)
step(s):单步调试(逐语句,跳入自定义函数内部执行)
backtrace(bt):查看函数的调用的栈帧和层级关系
frame(f):切换函数的栈帧
info(i):查看函数内部局部变量的数值
finish:结束当前函数,返回到函数调用点
continue(c):继续执行(跳到下一个断点)
print(p):打印值及地址
quit(q):退出调试
break+num(b):在第num行设置断点
info breakpoints:查看当前设置的所有断点
delete breakpoints num(d):删除第num个断点
display:追踪查看具体变量值
undisplay:取消追踪观察变量
watch:被设置观察点的变量发生修改时,打印显示
i watch:显示观察点
enable breakpoints:启用断点
disable breakpoints:禁用断点
x:查看内存
run argv[1]? argv[2]:调试时命令行传参
set follow-fork-mode child:#Makefile项目管理,选择跟踪父子进程(fork())
Tips:
编译程序时,需要加上-g参数,之后才能进行gdb调试,gcc -g hello.c -o hello
回车键,重复上一命令
文章来源:https://blog.csdn.net/weixin_48608385/article/details/135070843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!
最新文章
Python教程
深入理解 MySQL 中的 HAVING 关键字和聚合函数
Qt之QChar编码(1)
MyBatis入门基础篇
用Python脚本实现FFmpeg批量转换
SpringBoot3自动配置原理
人工智能:机器与人类的对决
【测试面试题每日一刷】22道接口测试面试题,附答案
(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)
分布式任务调度QuartZ框架使用(通过注解使用quartz)
安全狗waf
CCF-B类 | 良心中科院1区TOP,期刊效率超级高!审稿人专业负责!
Linux系统中,激活conda envs之后,用户名和路径都消失了,如何添加回来
【MySQL】库的操作
TCP一对一聊天