关于我常用的一些调试方式

316天前 · 题解 · 全部文章 · 571次阅读

打算竞时最常见的就是(食大粪)调试。每个人都有自己的调试方式,至于单步调试速度实在有些慢,所以用的很少,所以我用的还是cout cerr居多,为了防止忘记所以来记录一下。

直接"===========\n"

从杨佬那学来的输出,各种变量分隔也很清晰。

cout<<"=========\n";
cout<<i<<' '<<q[i]<<'\n';

cerr输出

使用 cerr 在vscode中直接输出错误,cph中会将错误流单独输出,十分清晰。

vscode的cph插件显示的十分清晰

debug.h

从某算竞群偷师学来的方法,操作较为麻烦

设置方法

  1. debug 库放到 mingw64 依赖中
    下面是debug.h文件具体内容,原文件都采用的是cout,我改成了cerr。
    文件具体路径实例:
    algo文件夹并不是必须的,可以直接放在外面

    D:\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\algo
    D:\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\algo\debug.h
    #include<iostream>
    #include<time.h>
    using namespace std;
    void __print(int x) {cerr << x;}
    void __print(long x) {cerr << x;}
    void __print(long long x) {cerr << x;}
    void __print(unsigned x) {cerr << x;}
    void __print(unsigned long x) {cerr << x;}
    void __print(unsigned long long x) {cerr << x;}
    void __print(float x) {cerr << x;}
    void __print(double x) {cerr << x;}
    void __print(long double x) {cerr << x;}
    void __print(char x) {cerr << '\'' << x << '\'';}
    void __print(const char *x) {cerr << '\"' << x << '\"';}
    void __print(const string &x) {cerr << '\"' << x << '\"';}
    void __print(bool x) {cerr << (x ? "true" : "false");}
    //clock_t ttt = clock();
    //void __print(clock_t x) {cerr << int(x) << "ms";}
    template<typename T, typename V>
    void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
    template<typename T>
    void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
    void _print() {cerr << "]"<<endl;}
    template <typename T, typename... V>
    void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
    #define debug(x...) cerr << #x << " = ["; _print(x)
    template<typename T,typename T1>T amax(T &a,T1 b){if(b>a)a=b;return a;}
    template<typename T,typename T1>T amin(T &a,T1 b){if(b<a)a=b;return a;}
  2. 使用时在自己的模板中添加如下文件头

    #ifdef LOCAL
    #include"algo/debug.h"
    #else
    #define debug(x) 42
    #endif

    这段代码的主要意思就是判断根据是否定义本地环境来设置是否include对应库

  3. 设置CPH
    找到CPH拓展设置,添加 -DLOCAL ,一般会自动保存。
    对应设置

使用效果展示

自动输出到错误流中,在评测机中这个 debug.h 并不会被包含。

效果展示

交题记录

CF1975C

👍 3

none

最后修改于312天前

评论

目录

avatar

coolarec

你好,未曾谋面的陌生人

31

文章数

16

评论数

5

分类

那就出发吧!

99