Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
iPhone崩溃时使用;“无回溯”;_Iphone_Objective C_Crash Dumps_Crash Reports_Appstore Approval - Fatal编程技术网

iPhone崩溃时使用;“无回溯”;

iPhone崩溃时使用;“无回溯”;,iphone,objective-c,crash-dumps,crash-reports,appstore-approval,Iphone,Objective C,Crash Dumps,Crash Reports,Appstore Approval,我的iPhone应用最近被应用商店拒绝,“因为它在发布时崩溃”。然而,我无法重现这次崩溃。该应用程序在模拟器和苹果测试过的相同硬件和软件(运行iOS4的iPhone3.1)的设备上都能完美运行。他们发给我的崩溃日志上写着“没有回溯可用”,所以我没有地方查看我的代码。下面是一个例子: Incident Identifier: [...] CrashReporter Key: [...] Hardware Model: iPhone3,1 Process: [MyApp

我的iPhone应用最近被应用商店拒绝,“因为它在发布时崩溃”。然而,我无法重现这次崩溃。该应用程序在模拟器和苹果测试过的相同硬件和软件(运行iOS4的iPhone3.1)的设备上都能完美运行。他们发给我的崩溃日志上写着“没有回溯可用”,所以我没有地方查看我的代码。下面是一个例子:

Incident Identifier: [...]
CrashReporter Key:   [...]
Hardware Model:      iPhone3,1
Process:         [MyApp] [1172]
Path:            /var/mobile/Applications/[...]-3F1B-4504-A572-[...]/[MyApp].app/[MyApp]
Identifier:      [MyApp]
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2010-07-08 [...]
OS Version:      iPhone OS 4.0 (8A293)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xfe42c648
Highlighted Thread:  0

Backtrace not available

Unknown thread crashed with ARM Thread State:
    r0: 0x00002388    r1: 0x00000000      r2: 0x3e2b47c8      r3: 0x00000108
    r4: 0x2fe00000    r5: 0x00000000      r6: 0x00000000      r7: 0x00000000
    r8: 0x2ffffb48    r9: 0x2fffecfc     r10: 0x00000000     r11: 0x00000000
    ip: 0x00000010    sp: 0x2ffffb4c      lr: 0x2fe08907      pc: 0xfe42c648
  cpsr: 0x40000010

Binary Images:
    0x1000 -    0x78fff +[MyApp] armv7  <23af3d265c3086eaceb51cc649eb794f> /var/mobile/Applications/[...]-3F1B-4504-A572-[...]/[MyApp].app/[MyApp]
0x2fe00000 - 0x2fe26fff  dyld armv7  <697ae459733a7f0b6c439b21ba62b110> /usr/lib/dyld
[many more libraries...]
事件标识符:[……]
CrashReporter密钥:[……]
硬件型号:iPhone3,1
进程:[MyApp][1172]
路径:/var/mobile/Applications/[…]-3F1B-4504-A572-[…]/[MyApp].app/[MyApp]
标识符:[MyApp]
版本:???(???)
代码类型:ARM(本机)
父进程:已启动[1]
日期/时间:2010-07-08[…]
操作系统版本:iPhoneOS4.0(8A293)
报告版本:104
异常类型:EXC\U坏访问(SIGSEGV)
异常代码:0xfe42c648处的内核地址无效
突出显示的线程:0
回溯不可用
未知线程在ARM线程状态下崩溃:
r0:0x00002388 r1:0x00000000 r2:0x3e2b47c8 r3:0x0000108
r4:0x2FE00000R5:0x00000000 r6:0x00000000 r7:0x00000000
r8:0x2FFFB48 r9:0x2FFFFCFC r10:0x00000000 r11:0x00000000
ip:0x00000010 sp:0x2FFFB4C lr:0x2fe08907 pc:0xfe42c648
cpsr:0x40000010
二进制图像:
0x1000-0x78fff+[MyApp]armv7/var/mobile/Applications/[…]-3F1B-4504-A572-[…]/[MyApp].app/[MyApp]
0x2fe00000-0x2fe26fff dyld armv7/usr/lib/dyld
[更多图书馆…]
我如何开始调试这个?这可能是一个构建问题而不是一个编码错误吗?我可以从崩溃报告的“ARM线程状态”或“二进制图像”部分提取有用的信息吗

谢谢


*更新:*我第一次在另一台运行iOS 4的iPhone上安装了该应用程序,但仍然无法重现崩溃。我开始认为这是构建时参数(如库或目标版本)的问题。根据崩溃报告,我的应用程序是否有代码被执行

segfault不太可能是生成错误。要重现此问题,请在运行项目之前尝试清除iPhone模拟器上保存的所有信息;您可能假设NSUserDefaults中存在某些条目,这些条目存在于您自己的iPhone上,但在默认安装中不可用。如果这不能重现问题,那么您应该为每个组件创建单元测试,一次排除每个组件作为故障原因。最终,您将排除所有故障原因,但真正的故障原因除外。

请参阅符号化通常有助于您追踪崩溃的来源,但由于没有回溯,因此在这种情况下可能没有帮助

不要费心在模拟器上测试。模拟器构建和设备构建是针对两个不同硬件的完全独立的编译。仅仅因为它在模拟器上运行,就不会告诉你们任何关于设备故障的信息

请记住,苹果将通过在iOS4上启动应用程序等方式对应用程序进行压力测试,而其他应用程序会占用大部分内存。您还需要在测试设备上执行此操作


您很可能需要将您的测试设备恢复为默认值,以复制苹果所做的测试。然后在启动自己的应用程序之前打开所有可能的应用程序

我一直无法再现这次崩溃。我弄乱了几个构建参数,然后重新提交,结果被批准。

您可以从ARM线程状态获取一些信息。PC寄存器是唯一一个包含崩溃报告所抱怨的无效地址的寄存器。这意味着您的应用程序试图在该地址执行代码

SIGSEGV表示所讨论的地址无效。系统没有使用此地址设置内存页

我不认为iOS会允许您简单地从任何地址执行代码,但当函数返回时,堆栈帧可能已损坏,返回地址无效。这支持“回溯不可用”问题


堆栈污染可能是缓冲区溢出的结果。如果在局部变量数组上使用memcpy或集合循环并溢出数组的末尾,则可以销毁堆栈。

好主意;我试图重置模拟器,但没有成功。启动时运行的代码很简单,但无论如何,我会对其进行三重检查。测试需要在设备上完成。不能在模拟器中再现崩溃是毫无意义的。