没有调试信息的GDB没有跳过功能

时间:2010-04-03 07:15:23

标签: 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

知道发生了什么事吗?

艾伦

1 个答案:

答案 0 :(得分:0)

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

这是我的会议:

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)