OI中C++终端调试技巧
零、写在前面
癸卯年七月中,Z老师讲解调试技。愿今年,RP人和,百事聚兴,乃重写终端篇,增其旧志,刻OI巨佬技巧于其上,属予作文以记之
(若无特殊说明,默认在
壹、终端便利篇
一、目录表示
./
本级目录../
上级目录./ + 文件名
本级目录下的…… (可结合使用)(e.g../Desktop/1.cpp 指桌面下的 1.cpp 文件
)
二、清空
中:cls
只是隐藏命令,reset
才是清空命令 中:clear
reset
printf "\033c"
都行(貌似也可以Ctrl+L
?)
三、复制、粘贴与剪贴
Ctrl+C
表结束、终结的意思,复制、粘贴与剪贴应使用 Ctrl+Shift+C/V/X
四、程序不需要手动读入
./X < ./Y.in
把文件./Y.in
输入到./X
(一般为可执行文件)中./X > ./Z.out
把文件./X
输出结果输入到./Z.out
中
两者可以结合使用
需要注意的是,一但程序中使用了 freopen
,该两条命令将无效(但使用了 fopen
等还是可以用的)
贰、程序调试篇
(在终端中进行)
一、如何调用可执行文件
直接在终端中输入可执行文件名即可
e.g. 输入 ./a
并回车,表示运行 a
可执行文件
二、编译和编译选项
g++ XX.cpp
编译 XX.cpp
文件
但是光是这样编译,只会得到一个 a
的可执行文件(指编译出来的可执行文件命名不随被编译的文件名)
所以,我们需要以下一些命令来使该可执行文件更加方便调试:(直接加在上面那个很简约的命令后面即可)
-o + 编译出来的可执行文件名
: 顾名思义,用来命名可执行文件的(这样就不需要手动重命名了)-O1
或-O2
或-O3
: 吸氧,优化程序。理论上而言 比 更优,但比赛时默认开 ( 更容易出现不可预期的错误, 优化不明显?)-ftrapv
:用来查看整型是否溢出附用法:编译后运行可执行文件,如果弹出
Abroted
表示有变量溢出,如果不弹出表示啥事没有-lm
:链接数学库(但现在编译器都好像自动链接数学库了,所以加不加无所谓?)-fsanitize=address
:检查数组是否溢出附用法:若编译运行后弹出一大堆提示大概率是溢出了,好好看一下提示;若不弹出表示啥事没有
-pg
:查看程序瓶颈附用法:编译后运行可执行文件,运行后输入
gprof -b + 可执行文件名
,可以查看程序运行概况,包括函数运行时间等。通过比较可以清晰知道自己那些函数容易超时(-b
指简略输出)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效