繁体   English   中英

gdb断点在错误的行号中被命中

[英]gdb breakpoint gets hit in the wrong line number

在gdb中,我设置了一个断点,以便在满足第一个if条件时使gdb停止。 但gdb在另一行中停止, if不满足条件。 我读过gdb断点没有被击中 ,但它没有解决。 我认为只有当if (a == 1)得到满足并且只是在第3282行时gdb才会停止。我错了吗?

#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在第3282行中设置断点

断点1在0x40da02:文件file.c,第3282行。

info breakpoint显示:

Num Type Disp Enb地址什么
1个断点在搜索file.c:3282时保持y 0x000000000040da02
断点已经打了一次

但是gdb在第3284行停止,而不是3282,并且a不等于1

[切换到线程0x7ffff75b8700(LWP 3631)]
断点1,在file.c上搜索:3284
3284 if(b == 1){

gcc --version

gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2

我将gcc -g -O2更改为gcc -g -O0 ,然后一切顺利。 以下是关于gcc命令的-O2选项的文档。

-O2优化甚至更多。 GCC几乎执行所有支持的优化,不涉及空速 - 权衡。 与-O相比,此选项增加了编译时间和生成代码的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM