0

我有一个应用程序曾经在 ios4 和更早的操作系统中运行良好,但现在我在尝试在 ios5 的模拟器上运行它时经常看到 EXC_BAD_ACCESS。不幸的是,我现在使用的是 xcode 4.2,当我遇到错误时我无法看到我的僵尸对象。

该应用程序从不会在手机上崩溃,但它在模拟器上总是崩溃,所以我想在提交更新之前查看导致崩溃的原因。每当我收到错误(并且它发生在多个视图中)时,我都会得到

int retVal = UIApplicationMain(argc, argv, nil, nil); Thread 1: Program received signal: "EXC_BAD_ACCESS"

我从诊断屏幕和变量选项卡都启用了 NSZombie,但我仍然看不到任何东西。即使在 didFinishLaunchingWithOptions 中添加一行,其目的是多次释放同一个对象,也会在启动时给我这个错误,但从未被报告为 NSZombie。

我究竟做错了什么?

此外,当这些错误发生时,这就是我在调试窗口中看到的。这看起来像堆栈跟踪,但有什么办法可以得到行号吗?

#0  0x020b609b in objc_msgSend ()
#1  0x002ba9d0 in -[NSURLConnectionInternal initWithInfo:] ()
#2  0x002bb4df in -[NSURLConnectionInternalConnection initWithInfo:] ()
#3  0x002ba0af in -[NSURLConnection(Private) _initWithRequest:delegate:usesCache:maxContentLength:startImmediately:connectionProperties:] ()
#4  0x002ba1f6 in -[NSURLConnection initWithRequest:delegate:] ()
#5  0x002ba17b in +[NSURLConnection connectionWithRequest:delegate:] ()
#6  0x01f13d81 in +[NSObject performSelector:withObject:] ()
#7  0x001df9ef in __NSThreadPerformPerform ()
#8  0x01ee697f in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ ()
#9  0x01e49b73 in __CFRunLoopDoSources0 ()
#10 0x01e49454 in __CFRunLoopRun ()
#11 0x01e48db4 in CFRunLoopRunSpecific ()
#12 0x01e48ccb in CFRunLoopRunInMode ()
#13 0x02775879 in GSEventRunModal ()
#14 0x0277593e in GSEventRun ()
#15 0x00516a9b in UIApplicationMain ()
#16 0x00055919 in main at /Volumes/Data/xxxx/Classes/internal/main.m:14
#17 0x00002d75 in start ()
4

1 回答 1

1

使用 Instruments 调试僵尸通常是最容易的。为此有一个预设/模板工具。Instruments 将在收到僵尸消息时停止您的程序,您甚至可以使用它来查看每个引用计数操作。

于 2011-12-12T08:35:52.177 回答