如何让 gdb 从 icc '-check-pointers=write' 中断"CHKP: Bounds check error"

How to get gdb to break on "CHKP: Bounds check error" from icc `-check-pointers=write`

本文关键字:中断 CHKP error check Bounds write -check-pointers gdb icc      更新时间:2023-10-16

Intel icc编译器有一个运行时检查功能-check-pointers=write,它会做一些魔术来检查指针是否写超出了它应该写的数据。当我在我的代码上运行这个代码时,我在gdb中得到了数百个这样的错误。我想有gdb在此错误的第一个实例上中断,但它不作为异常或信号实现,因此catch throwcatch signal不起作用,我不知道是否有与此功能相关的函数名称。

当运行时检查器击中它时,是否有任何方法使调试器"中断"?

-check-pointers特性安装来自libchkp.so的代码,并且所有函数中都有chkp前缀。使用info functions chkp对gdb中的函数进行快速搜索,发现回溯函数名为"chkp_print_traceback",因此这将在回溯发生时安装一个断点:

break chkp_print_traceback

现在它停止了!

[New Thread 0x7fffce34c700 (LWP 41385)]
[New Thread 0x7fffceb4d700 (LWP 41384)]
[New Thread 0x7fffd034e700 (LWP 41383)]
CHKP: Bounds check error ptr=0x7ffe24685870 sz=4 lb=0x7ffe24685860 ub=0x7ffe2468586f loc=0xb170b0
[New Thread 0x7ffec47fc700 (LWP 41621)]
[New Thread 0x7ffe29fff700 (LWP 41622)]
[New Thread 0x7ffed47fe700 (LWP 41603)]
[New Thread 0x7ffecc7fe700 (LWP 41605)]
[New Thread 0x7ffef07f8700 (LWP 41598)]
[New Thread 0x7fff147f8700 (LWP 41597)]
[New Thread 0x7fff387f8700 (LWP 41595)]
[New Thread 0x7fff687f8700 (LWP 41594)]
[New Thread 0x7fff707f8700 (LWP 41590)]
[New Thread 0x7fff907f8700 (LWP 41589)]
[New Thread 0x7fffb45ec700 (LWP 41587)]
[New Thread 0x7ffec4ffd700 (LWP 41577)]
[New Thread 0x7ffec57fe700 (LWP 41442)]
[New Thread 0x7ffec7fff700 (LWP 41441)]
[New Thread 0x7ffecefff700 (LWP 41440)]
[New Thread 0x7ffed5fff700 (LWP 41439)]
[New Thread 0x7ffef0ff9700 (LWP 41438)]
[Switching to Thread 0x7ffec47fc700 (LWP 41621)]
Breakpoint 1, 0x00007ffff5f32d74 in chkp_print_traceback () from /opt/intel/composer_xe_2015.2.164/compiler/lib/intel64/libchkp.so
(gdb) where
#0  0x00007ffff5f32d74 in chkp_print_traceback () from /opt/intel/composer_xe_2015.2.164/compiler/lib/intel64/libchkp.so
#1  0x00007ffff5f31706 in __chkp_check_bounds () from /opt/intel/composer_xe_2015.2.164/compiler/lib/intel64/libchkp.so
#2  0x0000000000b170b0 in redacted