[英]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.