OI中C++终端调试技巧
零、写在前面
癸卯年七月中,Z老师讲解调试技。愿今年,RP人和,百事聚兴,乃重写终端篇,增其旧志,刻OI巨佬技巧于其上,属予作文以记之
(若无特殊说明,默认在 \(\texttt{Linux}\) 下操作)
壹、终端便利篇
一、目录表示
./本级目录../上级目录./ + 文件名本级目录下的…… (可结合使用)(e.g../Desktop/1.cpp 指桌面下的 1.cpp 文件)
二、清空
- \(\texttt{Windows}\) 中:
cls只是隐藏命令,reset才是清空命令 - \(\texttt{Linux}\) 中:
clearresetprintf "\033c"都行(貌似也可以Ctrl+L?)
三、复制、粘贴与剪贴
\(\texttt{Windows}\) 中右键即可复制
\(\texttt{Linux}\) 中 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: 吸氧,优化程序。理论上而言 \(\text{-O3}\) 比 \(\text{-O2}\) 更优,但比赛时默认开 \(\text{-O2}\)(\(\text{-O3}\) 更容易出现不可预期的错误,\(\text{-O1}\) 优化不明显?)-ftrapv:用来查看整型是否溢出附用法:编译后运行可执行文件,如果弹出
Abroted表示有变量溢出,如果不弹出表示啥事没有-lm:链接数学库(但现在编译器都好像自动链接数学库了,所以加不加无所谓?)-fsanitize=address:检查数组是否溢出附用法:若编译运行后弹出一大堆提示大概率是溢出了,好好看一下提示;若不弹出表示啥事没有
-pg:查看程序瓶颈附用法:编译后运行可执行文件,运行后输入
gprof -b + 可执行文件名,可以查看程序运行概况,包括函数运行时间等。通过比较可以清晰知道自己那些函数容易超时(-b指简略输出)

浙公网安备 33010602011771号