Joe*_*oel 2 c valgrind segmentation-fault
这是一个疯狂的黑客,但我试图故意在执行的特定点导致段错误,所以valgrind将给我一个堆栈跟踪.
如果有更好的方法,请告诉我,但我仍然很想知道如何故意导致段错误,以及为什么我的尝试不起作用.
这是我失败的尝试:
long* ptr = (long *)0xF0000000;
ptr = 10;
Run Code Online (Sandbox Code Playgroud)
我认为valgrind至少应该把它作为一个无效的写入,即使它不是一个分段违规.Valgrind对此一无所知.
有什么想法吗?
编辑
接受了答案,但我仍然有一些上升的选票,以获得一个更理智的方式来获得堆栈跟踪...
是否缺少*,如*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)
很抱歉提到明显但为什么不使用带有断点的gdb然后使用backtrace?
(gdb) b somewhere
(gdb) r
(gdb) bt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5065 次 |
| 最近记录: |