gpt4 book ai didi

c - 为什么我不能在这里插入一个断点(我可能会添加我所有的 friend 都可以,但我没有其他方法可以解决这个问题)

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:50 26 4
gpt4 key购买 nike

(gdb) list 1,20
1 int swap_n_add(int *xp, int *yp)
2 {
3 int x = *xp;
4 int y = *yp;
5
6 *xp = y;
7 *yp = x;
8 return x + y;
9 }
10
11 int main() {
12 int a1 = 534;
13 int a2 = 1057;
14 int sum = swap_n_add(&a1, &a2);
15 int diff = a1 - a2;
16
17 return sum * diff;
18 }
(gdb) b 18
No line 18 in file "swap_n_add.c".

我想检查 main 返回的值,所以我在 18 处设置了一个断点以检查那里的寄存器 (info register)。但它说那条线不存在,尽管它......说它确实存在。我有相同代码的 friend 可以把它放在那里。

最佳答案

我会质疑您没有展示的之前的设置步骤。如果您的 friend 能够在那里设置断点而您不能,那么您可能做错了什么。 (假设每个人都使用相同版本的所有工具)

对于 Ubuntu 和 gcc 4.6.3 的 gdb 版本 7.4-2012.04,我可以看到并在相关行设置断点:

> gcc -Wall -g file.c      <-- compile with -g for debug symbols
> gdb a.out <-- run against the executable
This GDB was configured as "x86_64-linux-gnu". <-- make sure it was configured for
For bug reporting instructions, please see: your architecture
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/mike/C/a.out...done. <-- and that your file loads symbols
(gdb) line 22, 39
22 int swap_n_add(int *xp, int *yp) <-- mine are different because I have a bunch
23 { of #include's in my test file
24 int x = *xp;
25 int y = *yp;
26
27 *xp = y;
28 *yp = x;
29 return x + y;
30 }
31
32 int main() {
33 int a1 = 534;
34 int a2 = 1057;
35 int sum = swap_n_add(&a1, &a2);
36 int diff = a1 - a2;
37
38 return sum * diff;
39 }
(gdb) b 39
Breakpoint 1 at 0x400530: file file.c, line 39.

请注意,如果我选择文件外的一行,比如 .. 75,它会提示您“文件中没有第 x 行”:

(gdb) b 75
No line 75 in the current file.
Make breakpoint pending on future shared library load? (y or [n])

如果您看到这一点,请仔细检查您的行号,这可能是您算错了。

如果您想查看返回值 (sum * diff),您始终可以在返回前将其设置为局部变量并在返回时中断。

关于c - 为什么我不能在这里插入一个断点(我可能会添加我所有的 friend 都可以,但我没有其他方法可以解决这个问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749067/

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