2010-12-21 70 views
0

在这里,我对iPad的发展和Objective-C有点新。我在这里读取设备日志时遇到问题。当我浏览日志时,人们说我已经构建并存档,并将该构建用于设备。以便下次将设备连接到计算机时,设备日志将自动表示崩溃日志。但这种情况并非如此。象征着iPad应用程序崩溃报告

我现在正在关注的步骤。

  1. 把xcode配置设备和释放。
  2. 构建 - >构建和存档。
  3. 转到生成文件夹,将二进制文件拖放到Itunes图标上并选择替换。
  4. 测试完成后,重新连接ipad,进入组织者窗口,选择设备,点击设备日志。
  5. 这只显示符号...不知道它在哪里崩溃。

如:崩溃报告

Thread 0 Crashed: 
0 libSystem.B.dylib    0x30d7c2d4 __kill + 8 
1 libSystem.B.dylib    0x30d7c2c4 kill + 4 
2 libSystem.B.dylib    0x30d7c2b6 raise + 10 
3 libSystem.B.dylib    0x30d90d72 abort + 50 
4 libSystem.B.dylib    0x30d7e980 __assert_rtn + 152 
5 libgcc_s.1.dylib    0x307e8b4e _Unwind_SjLj_Resume + 26 
6 CoreFoundation     0x35801d50 CFRunLoopRunSpecific + 432 
7 CoreFoundation     0x35801b88 CFRunLoopRunInMode + 52 
8 GraphicsServices    0x320c84a4 GSEventRunModal + 108 
9 GraphicsServices    0x320c8550 GSEventRun + 56 
10 UIKit       0x341dc322 -[UIApplication _run] + 406 
11 UIKit       0x341d9e8c UIApplicationMain + 664 
12 My EF       0x00002c84 main (main.m:14) 
13 My EF       0x00002c4c start + 32 

请让我知道,如果我做错了什么。

感谢 苏雷什

回答

0

编辑

据symbolicating你的代码 - 你正在做正确的一切。你可以告诉因为它说main.m:14告诉你堆栈跟踪在main.m的第14行

你看不到其他东西的原因是因为它不是你的代码:)苹果库是为你编译的 - 你只需将它们链接到你的应用程序。它不能告诉你因为你没有代码而崩溃的那条线!

这告诉你,崩溃发生在苹果代码的深处,这对你来说不是好消息。当你在XCode中运行它时,你需要让这个崩溃发生,这样你就可以看到到底发生了什么。

关于我的头顶,您是否已将libgcc_s包含在链接框架列表中?


是的,这是一个棘手的问题。

让我感到沮丧的是,它不一定是同一代码的构建,它必须与应用上安装的构建完全相同。重建不够好。

为了解决这个问题,我使用版本控制(特别是,git)。每次我将应用程序的一个版本发给测试人员时,我都会将构建文件夹复制到发行版/目录中。然后我给它加上标签(例如release_2010_12_10_showcase),如果他们回来时发生崩溃,我可以问他们什么时候我给他们的应用程序,并检出构建的正确版本。这意味着我有他们的应用程序上的构建符号,我在XCode中的代码与他们正在运行的代码完全相同,所以我可以看到发生崩溃的位置并修复它:)然后,使用git的魔力,我可以合并我的变化到我的最新代码:)

NS我还没有使用归档应用程序 - 这听起来像你做的是正确的事情,但我认为有某种魔术正在进行,只有苹果了解:)我也比如在我的版本控制中拥有所有内容,并且我对XCode中的档案库不够了解。尽管这可能意味着我应该学习他们的工作方式!

+0

HI院长 感谢您的回复。我知道了。这是象征性的。 和它是什么libgcc_s。你能告诉我它在做什么以及它如何以任何方式帮助我..? 谢谢 suresh – sbmandav 2010-12-21 14:00:30

+0

我不知道libgcc_s是什么 - 它似乎被你的应用程序中的东西所想。要将其添加为框架,请右键单击项目中的框架组,然后选择'添加' - >'现有框架'。您应该能够在该列表中找到libgcc_s.1.dylib。选择它,看看应用程序运行没有崩溃? – deanWombourne 2010-12-21 14:21:24

+0

如何最终将上面给出的堆栈跟踪与代码关联起来?我已经在git中标记了代码,但是我不完全确定我应该如何获取关联的行号(特别是考虑到它甚至不会在我的应用程序中运行除main.m之外的其他任何东西 - 所有其他的是在Apple/GNU框架中编译的) – smtlaissezfaire 2011-03-16 22:42:46

1

我也看到了。

我最好的猜测是抛出了一个异常,并被第5帧或第6帧捕获。然后,当它尝试重建原始堆栈跟踪并调用abort()时,出现了极大的错误。

如果是这种情况,那么真正的堆栈跟踪丢失了,您可能必须在调试器中重现问题才能看到真实的堆栈跟踪。

0

步骤来分析故障报告:

1.复印这是被推到了AppStore的,这是在释放和崩溃报告时所创建的文件.dSYM释放.app文件从苹果公司获得成夹。

2.OPEN终端应用程序并转到上面创建的文件夹(使用CD命令)。

3.atos -arch armv7 -o''/'< .dSYM filename here''。内存位置应该是应用程序根据报告崩溃的位置。

例:ATOS -arch的ARMv7 -o '应用name.app'/ '应用程序名称' 0x0003b508

这会告诉你确切的线,这导致崩溃的方法名。

例如:[classname functionName:]; -510

感谢