GDB не может отлаживать "привет мир" в Mac OS X - PullRequest
1 голос
/ 08 марта 2011

У меня есть следующая маленькая программа на 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

будучи г ++:

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.

Возможно, проблема в версии gdb, используемой в mac, или версии gcc в mac. Какие другие альтернативы существуют для GDB в Mac?

Заранее спасибо

PS: GDB Apple Leopard не выдает эту ошибку. Но я хочу использовать Eclipse CDT, и он не может работать с Apple GDB, поэтому я пытаюсь использовать версию GDB не Apple.

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Это прекрасно работает, если вы используете GDB в комплекте с Mac.Apple gcc включает в себя несколько небольших специфичных для Apple расширений, поэтому не удивлюсь, что она не на 100% совместима с какой-либо другой версией gdb.Возможно, вы также неправильно создали свой пользовательский gdb.

Вы упоминаете, что ваш g ++ - 4.3.4, а тот, который вы показываете выше, - 4.0.1.

0 голосов
/ 08 марта 2011

Моей первой мыслью было, что ваш fsf-gdb не понимает двоичные файлы Mach-0.

Быстрый взгляд на Google вернулся с: http://reverse.put.as/2009/01/14/how-to-compile-gdb-and-other-apple-open-source-packages-in-mac-os-x/, который показывает, что создание gdb не так тривиально, как можно подумать.

0 голосов
/ 08 марта 2011

Вероятно, не выпущен к реальной проблеме, но помните, что когда вы компилируете для целей отладки, отключите оптимизацию компилятора с флагом -O0. Если вы не передадите это для gcc при компиляции, вы получите "прикольные" результаты, когда выполняете пошаговое выполнение с помощью gdb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...