为了使页面变脏(打开页表项中的脏位),我触摸页面的第一个字节,如下所示:
pageptr[0] = pageptr[0];
Run Code Online (Sandbox Code Playgroud)
但在实践中,gcc将忽略死店淘汰的陈述.为了防止gcc优化它,我重新编写语句如下:
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
Run Code Online (Sandbox Code Playgroud)
似乎这个伎俩有效,但有点难看.我想知道是否有任何指令或语法具有相同的效果?而且我不想使用-O0旗帜,因为它也会带来很大的性能损失.
如何以编程方式在C或C++代码中设置断点,这对于Linux上的gdb有效?
即:
int main(int argc, char** argv)
{
/* set breakpoint here! */
int a = 3;
a++; /* In gdb> print a; expect result to be 3 */
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以得到一个gcc选项列表,可能导致gdb表现得很奇怪.
当然,我们都知道使用优化选项(例如-O3)会导致gdb中出现奇怪的行为,但是其他可以产生这种影响的选项是什么?
(我目前正在尝试在gdb中运行mpeg2解码器,即使在删除优化标志后我也会出现奇怪的行为......)