gpt4 book ai didi

iphone - 调试 Objective-C 和 Xcode 中抛出的异常

转载 作者:行者123 更新时间:2023-12-03 18:29:14 26 4
gpt4 key购买 nike

我是一名资深的 Microsoft 开发人员,对于使用 Xcode 进行 iPhone 开发还是个新手。因此,我正在阅读一本书并通过示例尝试自学如何使用 Objective-C 编写 iPhone 应用程序。到目前为止,一切都很好,但是,偶尔我会在运行时遇到通用的“objc_exception_throw”消息。当发生这种情况时,很难找到这个异常的来源。经过一番尝试和错误后,我找到了答案。其中一个参数拼写错误。

正如您在下面看到的,我漏掉了按钮中的第二个“t”,从而拼错了“otherButtonTitles”参数。

UIAlertView *alert = [[UIAlertView alloc] 
initWithTitle:@"Date and Time Selected"
message:message
delegate:nil
cancelButtonTitle:@"Cancel"
otherButonTitles:nil];

我花了很多时间才找到的原因是代码构建成功。这是 Objective-C 编译器的正常行为吗?当我犯这样的常见语法错误时,我习惯于在 .NET 编译器中构建失败。当我犯这些错误时,是否可以更改编译器设置以使构建失败?

最佳答案

首先,打开 ~/.gdbinit (这是您的主目录中名为 .gdbinit 的文件 - 是的,以点开头)并将其放入其中:

fb -[NSException raise]
fb objc_exception_throw
fb malloc_error_break

这将使用三个默认断点初始化 GDB,当它们发生时,GDB 将停止您的应用程序并向您显示堆栈跟踪。它与 Xcode 集成得很好,因此一旦某处发生异常或 malloc 失败,您就可以通过单击堆栈跟踪元素来很好地浏览代码。

然后,打开项目上的获取信息面板(或选择您的项目(组和文件中的顶部项目)并点击cmd-i),转到 Build 选项卡并将项目的 Base SDK 设置为 Device - iPhone OS [someversion]。一直滚动到底部并找到 GCC 4.0 - 警告 部分。那里;打开尽可能多的警告,但请确保打开将警告视为错误(这相当于GCC_TREAT_WARNINGS_AS_ERRORS)。就我个人而言,我将其设置为:

GCC Warning Build Settings
(来源:lyndir.com)

您现在应该会收到针对您在代码中可能做错的大多数事情的编译器警告,并且编译器不会让您运行代码,直到您修复它们。当事情确实通过了编译器的 Nose 时,您应该能够通过 GDB 在方便的地方中断来轻松找到问题。

您还应该查看 NSZombie*。这些环境变量对于尽早打破错误的内存分配或访问情况非常方便。例如;如果 NSZombieEnabled 则不会真正释放任何内容;在 dealloc 上,它将被 _NSZombie 覆盖,并且如果您尝试再次访问此已释放的内存(取消引用已释放的指针),您将在 GDB 中得到一些中断,而不是像这样进行调用正常,仅根据随机数据发布(当然,这不是您想要的)。有关详细信息,请参阅 http://www.cocoadev.com/index.pl?NSZombieEnabled .

关于iphone - 调试 Objective-C 和 Xcode 中抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com