gdb无法在mac os x中调试“hello world”

时间:2011-03-08 15:39:09

标签: c++ gdb debugging

我有以下小型C ++程序

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts("!!!Hello World!!!");
    return EXIT_SUCCESS;
}

我使用以下版本在Mac OS X Leopard上编译:

g++ -g hello.cpp -o hello.exe

是g ++:

host:bin macbook$ g++ --ver
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5493~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5493)

然后我尝试使用fsf-gdb 7.1调试这个程序:

fsf-gdb hello.exe

在main中放置一个断点:

(gdb) b main
Breakpoint 1 at 0x1f8f: file hello.cpp, line 5.

运行程序:

(gdb) r
Starting program: /Users/horacio/work/software/gdb/gdb-7.2-inst/bin/hello.exe 

Breakpoint 1, main () at hello.cpp:5
5       puts("!!!Hello World!!!");

并尝试步骤,发生这种情况:

(gdb) n
0x00003045 in ?? ()

如果我在Ubuntu Linux下也这样做,那么这是输出:

(gdb) n
!!!Hello World!!!
6       return EXIT_SUCCESS;

其中gdb = 7.1且g ++ = 4.3.4

有什么问题????老实说,我不明白为什么这在mac os x中不起作用。

问题可能是mac中使用的gdb版本或mac中的gcc版本。 mac中的gdb还有哪些其他选择?

提前致谢

PS:Apple Leopard的gdb不会产生此错误。但我想使用Eclipse CDT,它无法与Apple的gdb一起使用,这就是我尝试使用非Apple gdb版本的原因。

3 个答案:

答案 0 :(得分:1)

如果您使用与Mac捆绑在一起的gdb,这可以正常工作。 Apple的gcc包含一些特定于Apple的小扩展,因此它不会与其他版本的gdb 100%兼容也不会感到惊讶。您可能还错误地构建了自定义gdb。

你提到你的g ++是4.3.4,但你上面显示的是4.0.1。

答案 1 :(得分:0)

可能不会出现实际问题,但请记住,在编译以进行调试时,请使用-O0标志禁用编译器优化。如果你在编译时没有为gcc传递,那么当你用gdb执行步骤时,你会得到“时髦”的结果。

答案 2 :(得分:0)

我的第一个想法是你的fsf-gdb不理解Mach-0二进制文件。

快速浏览一下谷歌:http://reverse.put.as/2009/01/14/how-to-compile-gdb-and-other-apple-open-source-packages-in-mac-os-x/显示构建gdb并不像人们想象的那么简单。