OI中C++终端调试技巧

零、写在前面

癸卯年七月中,Z老师讲解调试技。愿今年,RP人和,百事聚兴,乃重写终端篇,增其旧志,刻OI巨佬技巧于其上,属予作文以记之

(若无特殊说明,默认在 Linux 下操作)

壹、终端便利篇

一、目录表示

  1. ./ 本级目录
  2. ../ 上级目录
  3. ./ + 文件名 本级目录下的…… (可结合使用)(e.g. ./Desktop/1.cpp 指桌面下的 1.cpp 文件

二、清空

  1. Windows 中: cls 只是隐藏命令,reset 才是清空命令
  2. Linux 中:clear reset printf "\033c" 都行(貌似也可以 Ctrl+L?)

三、复制、粘贴与剪贴

Windows 中右键即可复制

LinuxCtrl+C 表结束、终结的意思,复制、粘贴与剪贴应使用 Ctrl+Shift+C/V/X

四、程序不需要手动读入

  1. ./X < ./Y.in 把文件 ./Y.in 输入到 ./X (一般为可执行文件)中
  2. ./X > ./Z.out 把文件 ./X 输出结果输入到 ./Z.out

两者可以结合使用

需要注意的是,一但程序中使用了 freopen,该两条命令将无效(但使用了 fopen 等还是可以用的)

贰、程序调试篇

(在终端中进行)

一、如何调用可执行文件

直接在终端中输入可执行文件名即可

e.g. 输入 ./a 并回车,表示运行 a 可执行文件

二、编译和编译选项

g++ XX.cpp 编译 XX.cpp 文件

但是光是这样编译,只会得到一个 a 的可执行文件(指编译出来的可执行文件命名不随被编译的文件名)

所以,我们需要以下一些命令来使该可执行文件更加方便调试:(直接加在上面那个很简约的命令后面即可)

  1. -o + 编译出来的可执行文件名: 顾名思义,用来命名可执行文件的(这样就不需要手动重命名了)
  2. -O1-O2-O3: 吸氧,优化程序。理论上而言 -O3-O2 更优,但比赛时默认开 -O2-O3 更容易出现不可预期的错误,-O1 优化不明显?)
  3. -ftrapv:用来查看整型是否溢出

    附用法:编译后运行可执行文件,如果弹出 Abroted 表示有变量溢出,如果不弹出表示啥事没有

  4. -lm:链接数学库(但现在编译器都好像自动链接数学库了,所以加不加无所谓?)
  5. -fsanitize=address:检查数组是否溢出

    附用法:若编译运行后弹出一大堆提示大概率是溢出了,好好看一下提示;若不弹出表示啥事没有

  6. -pg:查看程序瓶颈

    附用法:编译后运行可执行文件,运行后输入 gprof -b + 可执行文件名,可以查看程序运行概况,包括函数运行时间等。通过比较可以清晰知道自己那些函数容易超时(-b 指简略输出)

posted @   DreamerX  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示