【问题标题】:App crashes on i386, works on x86_64应用程序在 i386 上崩溃,适用于 x86_64
【发布时间】:2010-06-19 13:34:13
【问题描述】:

我今天尝试在我的 Xcode 项目中切换架构,因为我即将使用尚未移植到 64 位的低级 QuickTime 内容。当我之前在 x86_64 上编译时,我的应用程序运行得很好。然后我将拱门切换到 i386 并繁荣,我的应用程序在启动时不断崩溃。

奇怪的是,堆栈跟踪与我自己的代码无关。

#0  0x9929ebf1 in __CFBasicHashDeallocate
#1  0x99286ea1 in _CFRelease
#2  0x992b397d in _CFAutoreleasePoolPop
#3  0x917d1dda in NSPopAutoreleasePool
#4  0x92b67bc9 in loadNib
#5  0x92b66f99 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]
#6  0x92b66eaa in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]
#7  0x92b66df5 in +[NSBundle(NSNibLoading) loadNibNamed:owner:]
#8  0x92b63bf9 in NSApplicationMain
#9  0x000023c8 in main at main.m:13

有什么想法吗?

【问题讨论】:

  • 它是否可能在另一个线程上崩溃?

标签: objective-c cocoa xcode x86-64 i386


【解决方案1】:

我的猜测是您在 nib 中创建了在 32 位模式下不安全的对象。例如,您可能会对某些不正确的对象的大小做出假设,例如,使用 double 而不是 CGFloat 或 int64_t 而不是 NSInteger。

【讨论】:

  • 任何想法如何缩小这个问题?我试图用调试器单步调试我的代码,但到目前为止没有可用的结果......找不到崩溃的地方。
  • 找到了!语句 [update setTitle:@"update available ➜"]; 导致它崩溃,因为我使用了非标准符号(箭头)。
  • @eaigner 我可能会向 Apple 提交错误。 ➜ 字符似乎不应该在加载笔尖时崩溃。你能把它简化为一个更小的测试用例(即,只是窗口上的一个标签或其他东西)吗?如果您在代码中setTitle: 是否有效?
  • 对不起,现在想通了。箭头只是误导了我,因为我正在搜索一些特定于架构的东西,但这是由于在那个按钮子类中过度释放(向使用便利分配器创建的 NSDictionary 发送了一个 -autorelease)。虽然想知道为什么这个错误没有出现在 x86_64 配置中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
相关资源
最近更新 更多