Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用命令行gdb调试MacOSX Cocoa应用程序(不带XCode)_Cocoa_Macos_Debugging_Gdb - Fatal编程技术网

使用命令行gdb调试MacOSX Cocoa应用程序(不带XCode)

使用命令行gdb调试MacOSX Cocoa应用程序(不带XCode),cocoa,macos,debugging,gdb,Cocoa,Macos,Debugging,Gdb,我使用了一个跨平台的工具包,它包装了Objective-C,所以我不/不能使用XCode。 只有纯命令行和普通的旧makefile 我用gcc-Wall-g-O0编译我的源代码,但是在gdb控制下运行它时,我没有得到堆栈帧或有效的源代码行 第一:我该怎么做才能得到这份工作。 第二:如何使用XCode 3.0,为gdb提供一个GUI前端 这是我在设置断点和执行回溯gdb命令时得到的结果 0 0x918194a9 in malloc_error_break () #1 0x91814497 in

我使用了一个跨平台的工具包,它包装了Objective-C,所以我不/不能使用XCode。 只有纯命令行和普通的旧makefile

我用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_u函数确实存在,但它们是完全错误的。看起来文件/行关联已断开。因此,在从XCode获得任何有效的GUI支持之前,我必须先进行修复


更新:好的,我可以从XCode内部设置项目并调试应用程序,但这不是我真正想要的。即使我在Xcode中使用-gdwarf-2更改了-g,命令行调试仍然无法工作。只需创建一个遗留makefile项目,将源代码添加到项目中,最后,在Executables下设置一个自定义可执行文件,指向构建的调试可执行文件。

当您试图直接使用GDB时,您没有提供足够的信息来解决问题。gdb会话的转录本将有助于gdb./foo、断点栏、运行、回溯

您可以通过运行>附加到进程>进程ID…通过Xcode调试任何已经运行的进程…。如果正在调试的问题位于main内部或之下,则可以在main的开始处引入暂停调用,以挂起进程并给您时间进行连接,然后只需向进程发送信号以使其继续


按照Paul R.的建议,建立一个Xcode项目要容易得多。Xcode确实可以用于编写、构建、运行和调试基于make的项目。您总是可以从一个空项目开始,添加源代码并自己创建构建目标。Xcode通过其外部目标类型内置了对基于make的构建目标的支持,但即使没有,您也可以使用Shell脚本目标来解决问题。

不起作用。在源文件中设置断点并不会停止程序。根据这一点以及您在原始问题中所说的,您的应用程序的某些部分似乎没有使用已启用的调试符号进行构建,或者可能在某个时候被删除?我可以保证所有文件都是使用gcc-Wall-g-O0构建的,但问题是这就够了。从Linux中,我知道-g是唯一必需的选项。在MacOSX上,我遇到了一些问题。我能告诉你们的是,这种方法适用于使用makefile构建的遗留项目。您只需要确保自定义可执行文件设置正确,源文件的位置与生成可执行文件时的位置相同,并且C标志中有-g。另一件事是尝试直接在控制台中的gdb中设置断点,例如b main,然后当您点击该按钮时,查看是否显示包含main的源文件,然后尝试在源文件中设置其他断点,看看是否有效。