我有以下小型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版本的原因。
答案 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并不像人们想象的那么简单。