【发布时间】:2017-01-10 09:14:02
【问题描述】:
在 gdb 中,我设置了一个断点,使 gdb 在满足第一个 if 条件时停止。但是 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在第3282行设置断点
0x40da02 处的断点 1:文件 file.c,行 3282.
info breakpoint 显示:
Num 类型 Disp Enb 地址 什么
1个断点保持y 0x000000000040da02在 在 file.c:3282 处搜索
断点已经命中 1 次
但是 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
【问题讨论】:
-
您是否认为
A永远不会大于1? -
不,gdb 只是打印“hello”。
-
这如何反驳我所说的?它应该打印
"correct" -
很多次调试项目,如果我在第3000行设置断点,gdb就在3000附近停止。gdb甚至在执行
n命令时跳回前行。我认为这是 gcc 优化。只有a>1可以打印“正确”。如果我不更改编译脚本,我可以让 gdb 停在特定的行吗?