2010-10-17 53 views
0

我使用一個跨平臺工具包,它包裝Objective-C,所以我不/不能使用XCode。 只是純粹的命令行和普通的舊makefile。使用命令行gdb(不帶XCode)調試MacOSX可可應用程序

我使用「gcc -Wall -g -O0」編譯我的源代碼,但是在gdb控制下運行它時,我沒有得到堆棧幀或有效的源代碼行。

第一:我能做些什麼來完成這項工作。 第二:如何使用XCode(3.0)給我一個gdb的GUI前端。

這是我所得到的設置斷點,並做了「回溯」 GDB命令

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獲得任何有效的GUI支持。

更新:好的,我能夠設置一個項目,並從XCode內部調試應用程序,但這不是我真正想要的。命令行調試仍然不起作用,即使我改變-g現在使用-gdwarf-2

回答

0

在Xcode中,只需創建一個遺留的makefile項目,將源代碼添加到項目中,最後設置一個自定義可執行文件(在可執行文件下)指向您的內置調試可執行文件。

+0

不起作用。在源文件中設置斷點不會停止程序。 – Lothar 2010-10-17 20:42:58

+0

基於這一點以及你在原始問題中的說法,它聽起來像是你的應用程序的某個部分沒有被啓用調試符號構建(或者它們在某個時候被剝離了)? – 2010-10-17 21:08:32

+0

我可以保證所有文件都是用「gcc -Wall -g -O0」構建的,但問題是這足夠了。從Linux我知道,-g是唯一必需的選項。在MacOSX上我有問題。 – Lothar 2010-10-17 21:15:59

0

當您嘗試直接使用GDB時,您無法提供足夠的信息來確定發生了什麼問題。 gdb會話的抄本將有所幫助(gdb ./foo,斷點欄,運行,回溯)。

通過運行>附加到進程>進程ID ...,您可以通過Xcode調試任何已經運行的進程。如果您正在調試的問題在main()以內的任何地方,您可以在main()開始時引入pause()的呼叫,以掛起您的流程並給您時間附加,然後只需指示流程繼續進行即可。

更容易做到,因爲Paul R.建議並建立一個Xcode項目。 Xcode確實可以用於編寫,構建,運行和調試基於make的項目。您始終可以從一個空白項目開始,添加源代碼並自行創建構建目標。 Xcode通過外部目標類型內置了對基於構建的構建目標的支持,但即使沒有,也可以使用Shell腳本目標來實現。

相關問題