c - GDB 不会在没有调试信息的情况下跳过函数

标签 c macos gdb

我在 Mac OS X Leopard 系统上编译了 GDB 7。单步执行 C 程序时,GDB 无法单步执行可能没有关联调试信息的“printf()”语句,并开始打印“无法找到当前函数的边界”。

这是一些输出:

$ /usr/local/bin/gdb try1
GNU gdb (GDB) 7.1
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin10".
(gdb) list
1   #include <stdio.h>
2   static void display(int i, int *ptr);
3   
4   int main(void) {
5      int x = 5;
6       int *xptr = &x;
7       printf("In main():\n");
8      printf("   x is %d and is stored at %p.\n", x, &x);
9      printf("   xptr holds %p and points to %d.\n", xptr, *xptr);
10     display(x, xptr);
(gdb) b 6
Breakpoint 1 at 0x1e8e: file try1.c, line 6.
(gdb) r
Starting program: /tmp/try1 

Breakpoint 1, main () at try1.c:6
6       int *xptr = &x;
(gdb) n
7       printf("In main():\n");
(gdb) n
0x0000300a in ?? ()
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function

知道发生了什么吗?

艾伦

最佳答案

您是否使用 -g 编译以启用调试信息?

这是我的 session :

epronk@godiva:~$ gdb a.out
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) list
1   #include <stdio.h>
2     
3   int main(void) {
4     int x = 5;
5     int *xptr = &x;
6     printf("In main():\n");
7     printf("   x is %d and is stored at %p.\n", x, &x);
8     printf("   xptr holds %p and points to %d.\n", xptr, *xptr);
9     return 0;
10  }
(gdb) b 6
Breakpoint 1 at 0x400533: file d.c, line 6.
(gdb) r
Starting program: /home/epronk/a.out 

Breakpoint 1, main () at d.c:6
6     printf("In main():\n");
(gdb) n
In main():
7     printf("   x is %d and is stored at %p.\n", x, &x);
(gdb) n
   x is 5 and is stored at 0x7fff0f3177c4.
8     printf("   xptr holds %p and points to %d.\n", xptr, *xptr);
(gdb) n
   xptr holds 0x7fff0f3177c4 and points to 5.
9     return 0;
(gdb) n
10  }
(gdb)

关于c - GDB 不会在没有调试信息的情况下跳过函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2570537/

相关文章:

c++ - GDB - 我在哪个线程上?

gdb - 为什么 GDB 'step' 命令会跳过结构声明?

c++ - G++中const中的存储分配

c - dma_mmap_coherent 和 remap_pfn_range 有什么区别?

C getopt,有一个不需要 -x 标志的参数

c - 用于获取 int 的 K&R 代码

c - 使用 ASL 登录到 console.app

macos - 在 macOS Sierra 上启动语音首选项面板

mysql - 无法启动 phpMyAdmin。不断收到 #2002 套接字错误

django - -bash : createdb: command not found