在gdb中,我设置了一个断点,以便在满足第一个if
条件时使gdb停止。但gdb在另一行中停止,并且不满足if
条件。我读过gdb breakpoint does not get hit,但它没有解决。我认为gdb仅在满足if (a == 1)
并且在第3282行时停止。我错了吗?
#pragma GCC push_options
#pragma GCC optimize("O0")
static void __attribute__ ((noinline)) search(int a, int b)
{
// other code here
if (a == 1) {
printf("condition1\n");
printf("condition1\n"); // line 3282, breakpoint is set here
}
if (b == 1) { // line 3284, in fact, gdb stops in this line
printf("condition2\n");
printf("condition2\n");
}
}
#pragma GCC pop_options
使用命令b file.c:3282
0x40da02处的断点1:文件file.c,行 3282。
info breakpoint
显示:
Num Type Disp Enb Address什么
1个断点保持y 0x000000000040da02 in 在file.c上搜索:3282
断点已经达到1次
但是gdb在第3284行停止,而不是3282,而a不等于1
[切换到线程0x7ffff75b8700(LWP 3631)]
断点1,搜索 at file.c:3284
3284 if(b == 1){
gcc --version
gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2
答案 0 :(得分:1)
我将gcc -g -O2
更改为gcc -g -O0
,然后一切顺利。以下是关于gcc命令的-O2
选项的文档。
-O2优化甚至更多。 GCC几乎执行所有支持的优化,不涉及空速 - 权衡。 与-O相比,此选项会增加编译时间和生成代码的性能。