Valgrind:故意造成段错误

Joe*_*oel 2 c valgrind segmentation-fault

这是一个疯狂的黑客,但我试图故意在执行的特定点导致段错误,所以valgrind将给我一个堆栈跟踪.

如果有更好的方法,请告诉我,但我仍然很想知道如何故意导致段错误,以及为什么我的尝试不起作用.

这是我失败的尝试:

long* ptr = (long *)0xF0000000;
ptr = 10;
Run Code Online (Sandbox Code Playgroud)

我认为valgrind至少应该把它作为一个无效的写入,即使它不是一个分段违规.Valgrind对此一无所知.

有什么想法吗?

编辑

接受了答案,但我仍然有一些上升的选票,以获得一个更理智的方式来获得堆栈跟踪...

Kri*_*ost 7

打电话吧abort().这不是一个段错误,但它应该生成一个核心转储.


GMa*_*ckG 5

是否缺少*,如*ptr = 10?你有什么不会编译.

如果它确实存在,那当然不会导致seg-fault,因为你只是分配一个数字.解除引用可能.

假设在您的操作系统上取消引用null会导致段错误,以下应该可以解决这个问题:

inline void seg_fault(void)
{
    volatile int *p = reinterpret_cast<volatile int*>(0);
    *p = 0x1337D00D;
}
Run Code Online (Sandbox Code Playgroud)


eya*_*alm 5

很抱歉提到明显但为什么不使用带有断点的gdb然后使用backtrace?

(gdb) b somewhere
(gdb) r
(gdb) bt
Run Code Online (Sandbox Code Playgroud)