Отладка приложений MacOSX Cocoa с помощью командной строки GDB (без XCode) - PullRequest
0 голосов
/ 18 октября 2010

Я использую кроссплатформенный инструментарий, который упаковывает Objective-C, поэтому я не могу / не могу использовать XCode.Просто чистая командная строка и старые добрые make-файлы.

Я компилирую свой исходный код с помощью "gcc -Wall -g -O0", но при запуске его под управлением GDB я не получаю стековые фреймы или допустимые строки исходного кода.

Первое: что я могу сделать, чтобы получить эту работу.Второе: как я могу использовать XCode (3.0), предоставляя мне графический интерфейс для gdb.

Это то, что я получаю, устанавливая точку останова и выполняя команду gtb "backtrace"

0  0x918194a9 in malloc_error_break ()
#1  0x91814497 in szone_error ()
#2  0x9173e523 in szone_free ()
#3  0x9173e38d in free ()
#4  0x000d3c53 in Agui_Paint_Context::checkFontColor ()
#5  0x000b2c81 in Agui_Color_Button::attribute_table ()
#6  0x000e5b2e in Agui_Scroll_Canvas_Scrolling_Mixin::~Agui_Scroll_Canvas_Scrolling_Mixin ()
#7  0x000e8968 in Agui_Scroll_Canvas_Scrolling_Mixin::~Agui_Scroll_Canvas_Scrolling_Mixin ()
#8  0x000e8cd9 in Agui_Scroll_Canvas_Scrolling_Mixin::~Agui_Scroll_Canvas_Scrolling_Mixin ()
#9  0x93325e8f in -[NSApplication sendAction:to:from:] ()
#10 0x93325dcc in -[NSControl sendAction:to:] ()
#11 0x93325c52 in -[NSCell _sendActionFrom:] ()
#12 0x933252ab in -[NSCell trackMouse:inRect:ofView:untilMouseUp:] ()
#13 0x93324afe in -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] ()
#14 0x933243b8 in -[NSControl mouseDown:] ()
#15 0x93322af7 in -[NSWindow sendEvent:] ()
#16 0x932ef6a5 in -[NSApplication sendEvent:] ()
#17 0x0008dc6e in Agui_Attribute_Type_Boolean::~Agui_Attribute_Type_Boolean ()
#18 0x9324cfe7 in -[NSApplication run] ()
#19 0x0008e6b7 in Agui_Attribute_Type_Boolean::~Agui_Attribute_Type_Boolean ()
#20 0x0003faba in ?? ()
#21 0x00073ddd in ?? ()
#22 0x0007c996 in ?? ()
#23 0x00004bb2 in ?? ()
#24 0x00002d76 in ?? ()
(gdb) 

Функции "Agui_" существуют, но они абсолютно неверны.Похоже, что связь файла / строки нарушена.Поэтому мне нужно сначала исправить, прежде чем я получу какую-либо действительную поддержку графического интерфейса от XCode.

ОБНОВЛЕНИЕ: Хорошо, я смог настроить проект и отладить приложение изнутри XCode, но это не то, что я действительно хочу.Отладка командной строки по-прежнему не работает, даже когда я изменил -g теперь с -gdwarf-2

Ответы [ 2 ]

0 голосов
/ 18 октября 2010

Вы не предоставляете достаточно информации, чтобы понять, что происходит, когда вы пытаетесь использовать GDB напрямую. Помогла бы стенограмма сеанса GDB (GDB ./foo, точка останова, запуск, обратная трассировка).

Вы можете отлаживать любой уже запущенный процесс через XCode, выполнив Выполнить> Присоединить к процессу> Идентификатор процесса…. Если проблема, которую вы отлаживаете, находится где-то в пределах или ниже main(), вы можете ввести вызов pause() в начале main(), чтобы приостановить процесс и дать вам время для подключения, а затем просто подать сигнал процессу это продолжить.

Гораздо проще было бы сделать, как полагает Пол Р., и создать проект Xcode. Xcode действительно может использоваться для написания, сборки, запуска и отладки проектов на основе make. Вы всегда можете начать с пустого проекта, добавить исходный код и создать цели сборки самостоятельно. Xcode имеет встроенную поддержку для целей сборки на основе make через тип External Target, но даже если это не так, вы можете использовать цель Shell Script, чтобы обойтись.

0 голосов
/ 18 октября 2010

В Xcode просто создайте устаревший проект makefile, добавьте исходный код в проект и, наконец, установите настраиваемый исполняемый файл (в разделе Исполняемые файлы), указывающий на встроенный исполняемый файл отладки.

...