提问人:RaptorIV 提问时间:2/27/2012 最后编辑:RaptorIV 更新时间:8/19/2015 访问量:8106
C++ 创建用于调试目的的 SIGSEGV
C++ Creating a SIGSEGV for debug purposes
问:
我正在开发一个无锁共享变量类,我希望能够生成一个 SIGSEGV 错误,以查看我的实现是否按我的计划工作。我尝试创建一个修改指针并读取 100 次的函数。然后,我在两个线程中调用此函数,并让线程在我的程序中无限运行。这不会生成我想要的错误。我应该如何去做?
编辑我根本不处理段错误,但是如果我删除锁,它们会在我的程序中生成。我想使用无锁设计,因此我创建了一个共享变量类,该类使用 CAS 保持无锁。有没有办法让一段代码生成段错误,这样我就可以使用我的类来测试它是否解决了问题?
答:
6赞
Ben Voigt
2/27/2012
#1
malloc
+ mprotect
+ 取消引用指针
23赞
Flexo
2/27/2012
#2
#include <signal.h>
raise(SIGSEGV);
将导致发出适当的信号。
评论
0赞
RaptorIV
2/27/2012
我需要通过取消引用无效指针之类的东西来生成信号
0赞
Lightness Races in Orbit
2/27/2012
@RaptorIV:解释为什么你关心产生信号的是什么。
0赞
RaptorIV
2/27/2012
它需要在真实环境中生成,就好像是多线程程序造成的一样。我根本没有处理它,我只需要看到我的程序因此而崩溃,所以我可以在实现我的类时看到它是否不存在
0赞
Flexo
2/27/2012
像这样发出信号(有一些警告)将被视为“真正的”段错误,信号将被传递,如果存在异常处理程序,则将调用异常处理程序。从任何意义上讲,它仍然是一个“真实”的信号,如果它用于测试,那么如果不出意外,它是一个很好的起点。
4赞
Tudor
2/27/2012
#3
取消引用指向未分配内存的指针(至少在我的系统上):
int *a;
*a = 0;
评论
How should I go about doing this?