debug专用

比赛中可能用到的g++选项
嫌编译选项太长可以写在bash里

  1. # build.sh
  2. g++ $1.cc -Wall -Wextra -Wconversion -Wshadow -Wformat=2
  3. # 调用
  4. sh build.sh name

编译警告

-Wall -Wextra

包含了很多有用或没用的警告,比如non-void function没写返回值,或定义了没用的变量等。有时还会指出哪些地方优先级容易出问题(虽然大多数是压代码搞出来的)。

-Wconversion
警告一下某些隐式类型转换。有这个对曾经写出
const int pi=3.14159265358979…
这样的无脑代码的我会好一些。

-Wshadow
警告一下重名变量的掩盖的问题。

-Wformat=2
警告一下不规范的scanf/printf格式。

-Wstack-usage=1
输出一下每个函数使用栈的信息。

运行时检查

-D_GLIBCXX_DEBUG
(#define GLIBCXX_DEBUG)
加入对STL的运行时检查。
主要是迭代器合法性检查和算法执行的前置条件检查。

-fsanitize=undefined -g
UBsan的运行期未定义行为检查。整数溢出也能被查出来。

-fsanitize=address -g
Address Sanitizer的检查,主要查越界访问这种情况。

有了这些在RE的情况下会方便点。

 

用时/调用次数分析

不用在代码里面写一大堆clock()了

time ./a.out <in.txt >out.txt
先看一下总时间

-pg 然后 gprof
可以看到各个函数运行的占比

-ftest-coverage -fprofile-arcs 然后 gcov
可以看到每行代码的调用次数

毒瘤卡常专用

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注