考场上自测与快速配置Arbiter

1.在虚拟机下编译运行所有程序(必选)

在比赛还剩1小时到半小时时,停止写代码(按照规划,应该在前面就把暴力写完了),打开虚拟机进行自测。

虚拟机打开方式因考场而异,大部分考场配置了拖放功能。但拖放有要领:

  1. 不能拖放到桌面!会失败。
  2. 打开一个文件夹,保证这个文件夹窗口置于虚拟机的最上方!,将整个文件夹拖入虚拟机。

如果无法拖放,可以尝试将文件复制进去。

打开终端进行操作。

使用编译指令(一般来说,是 g++ ***.cpp -o *** -std=c++14 -O2 -static)将每个文件编译。

将输入文件重命名为 ***.incp ex_***1.in ***.in)。

运行程序。这里需要测时空的话,可以:

/bin/time -p -v ./***

Maximum resident set size (kbytes) 的值就是空间的字节数。

注意:这个值是你用多少测多少,不是你开多少测多少,小心!!

如果你想要测你开多少测多少,可以在码代码时在开头添加 bool ST; 结尾添加 bool ED;,然后 cerr << (&ST-&ED)/1024.0/1024.0 << endl;

使用 sanitize 测 ub(尽量选)

使用 -fsanitize=undefined,address(开了就不能开 -static)编译(记不住没关系,打个类似的会提示你的:g++: error: unrecognized command line option ‘-fsaniti’; did you mean ‘-fsanitize=’?)然后运行程序,如果出现越界访问之类的会报错:

==6840==ERROR: AddressSanitizer: global-buffer-overflow on address 0x5625875f49f0 at pc 0x5625875eb455 bp 0x7ffd33f7dbf0 sp 0x7ffd33f7dbe0
WRITE of size 8 at 0x5625875f49f0 thread T0
    #0 0x5625875eb454 in main (/home/noi/players/day1/GD-0001/mod/mod+0x3454)
    #1 0x7f8187c45082 in __libc_start_main ../csu/libc-start.c:308
    #2 0x5625875eb2cd in _start (/home/noi/players/day1/GD-0001/mod/mod+0x32cd)
Address 0x5625875f49f0 is a wild pointer.
SUMMARY: AddressSanitizer: global-buffer-overflow (/home/noi/players/day1/GD-0001/mod/mod+0x3454) in main
Shadow bytes around the buggy address:
  0x0ac530eb68e0: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb68f0: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6900: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6910: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6920: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
=>0x0ac530eb6930: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9[f9]f9
  0x0ac530eb6940: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6950: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6960: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6970: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
  0x0ac530eb6980: f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9 f9
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==6840==ABORTING

使用 arbiter 测试(可选)

这个是最后一步,应当在考前熟悉,最后20分钟进行测试。

arbiter 有几个注意点:

  1. 不会告诉你有什么问题,要自己找;
  2. 不断按保存!
  3. 比较方式不要选择全文比较,按照题目输出来比较,不然有bug;
  4. 你勾选选手的时候要点那个编号不是那个复选框!不然勾不到!

本文作者:ZnPdCo

本文链接: https://znpdco.github.io/blog/2024/11/29/test-in-contest/

本页面的全部内容在 CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用

评论