[英]Why does my debugger sometimes freak out and do things like not line up with my code?
[英]Stopping debugger at an optimized out line of code
如果我想停在一个空的代码块中,那总是一个问题。
if (...)
{ // I want the debugger to stop here!
}
如果我添加任意一行代码,这些代码不影响程序行为,则可能会根据代码行对其进行优化
if (...)
{
int a;
a = a; // won't work
}
if (...)
{
int a;
int b = a; // will work
}
因此,这里出现两个问题:
1)什么最简单的单行代码不会被优化(但实际上什么也做不了!),可以用来停止调试器? 2)有没有办法切换所有优化,以便能够停在任意代码行? 编译器标志-O0不起作用。
足够好的单行代码可能是一些有用且有趣的assert
语句,但条件是编译器无法将其固定折叠。 通常,一些有意义且有用的assert (p!=NULL)
或assert(i>0)
足够了,其中p
是一些现有的指针变量或形式,或者i
是一些现有的带符号整数变量或形式。
顺便说一句,您处于项目的调试阶段,因此添加足够好的有意义的assert
语句将很有帮助。 当然,您希望包含<cassert>
标头。
不要忘记,如果使用-DNDEBUG
标志进行编译,则会跳过assert(3)语句。
您也可以在Linux / x86上使用asm volatile ("nop")
。 注意,调试器需要一些代码来放置断点。 您不需要空代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.