gpt4 book ai didi

c - gdb 断点在错误的行号中命中

转载 作者:太空狗 更新时间:2023-10-29 11:17:35 26 4
gpt4 key购买 nike

在 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 行设置断点

Breakpoint 1 at 0x40da02: file file.c, line 3282.

info断点显示:

Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040da02 in search at file.c:3282
breakpoint already hit 1 time

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

[Switching to Thread 0x7ffff75b8700 (LWP 3631)]
Breakpoint 1, search at 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 Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff. As compared to -O, this option increases both compilation time and the performance of the generated code.

关于c - gdb 断点在错误的行号中命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com