iPhone SDK 3.0和symbolicatecrash不相处?

12 iphone debugging cocoa-touch

*更新* 我已经重新安装了Snow Leopard,干净安装.完全擦除了我现有的Leopard安装.同样的问题仍然存在.

我已尝试使用多种版本的symbolicatecrash来解析崩溃报告中的符号.从Apple提供的版本到Alan的Quatermain的版本发布在GitHub上,最后来自http://openradar.appspot.com/6438643.

无论出于何种原因,我可以得到的最好结果是我自己的库上的符号得到解决.通常,这足以让我指向正确的方向 - 有时则不是.使用2.x我可以在每个线程的堆栈跟踪中获取代码+ Apple提供的库时没有问题.

我的环境很可能是一个问题,我完全不怀疑Apple或Alan做过的工作.是的我确定我收藏的dSYM与生成崩溃报告的dSYM完全相同.

虽然'Foo'是我,并且从中获取符号非常棒,但我需要查看堆栈中其他函数的符号才能真正理解我的报告.

注意:对于在iPhone OS 2.2.1上运行应用程序崩溃的设备,获取所有符号都没有问题.这是一个iPhone OS 3.0问题.

此外,在详细模式下运行symbolicatecrash时,有些事情让我感到错误:

- NO MATCH
NOT searching in Spotlight for dsym with UUID of /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
## Warning: Can't find any unstripped binary that matches version of /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation

..........fetching symbol file for libobjc.A.dylib--[undef] 
Searching [/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0 (5A345)/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0 (5A347)/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0.1 (5B108)/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0.2 (5C1)/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.1.1/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.1/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.2.1/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.2/Symbols/usr/lib/libobjc.A.dylib /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0 (7A341)/Symbols/usr/lib/libobjc.A.dylib]...--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0 (5A345)/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0 (5A347)/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0.1 (5B108)/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.0.2 (5C1)/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.1.1/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.1/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.2.1/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/2.2/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
--[/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.0 (7A341)/Symbols/usr/lib/libobjc.A.dylib] -- NO MATCH
NOT searching in Spotlight for dsym with UUID of /usr/lib/libobjc.A.dylib
## Warning: Can't find any unstripped binary that matches version of /usr/lib/libobjc.A.dylib
Run Code Online (Sandbox Code Playgroud)

以下是通过symbolicatecrash运行崩溃报告后的示例:

Thread 0 Crashed:
0   libSystem.B.dylib                   0x31dc476c 0x31d46000 + 517996
1   libSystem.B.dylib                   0x31dc4755 0x31d46000 + 517973
2   Foo                            0x00053075 uncaught_exception_handler + 21
3   CoreFoundation                      0x3028f65f 0x301fd000 + 599647
4   libobjc.A.dylib                     0x30013693 0x3000c000 + 30355
5   libstdc++.6.dylib                   0x374ccc2d 0x3748a000 + 273453
6   libstdc++.6.dylib                   0x374ccc81 0x3748a000 + 273537
7   libstdc++.6.dylib                   0x374ccd4d 0x3748a000 + 273741
8   libobjc.A.dylib                     0x300135ff 0x3000c000 + 30207
9   CoreFoundation                      0x30222f2d 0x301fd000 + 155437
10  CoreFoundation                      0x30222ecb 0x301fd000 + 155339
11  Foundation                          0x30521e33 0x30501000 + 134707
12  Foundation                          0x30570d47 0x30501000 + 458055
13  Foo                            0x0000a1db -[Bar barfoo] (Bar.m:1617)
14  Foo                            0x00032f73 -[MyViewController foobar] (MyViewController.m:727)
15  Foo                            0x000329b9 -[MyViewController foobar] (MyViewController.m:666)
16  Foo                            0x00031fab -[MyViewController tabBar:tabSelected:] (MyViewController.m:440)
17  Foo                            0x00068d41 -[TTTabBar setSelectedTabIndex:] (TTTabBar.m:160)
18  Foo                            0x00068ca3 -[TTTabBar setSelectedTabView:] (TTTabBar.m:142)
19  Foo                            0x000689cf -[TTTabBar tabTouchedUp:] (TTTabBar.m:83)
20  CoreFoundation                      0x302552f9 0x301fd000 + 361209
21  UIKit                               0x3094d101 0x308ed000 + 393473
22  UIKit                               0x3094d0a1 0x308ed000 + 393377
23  UIKit                               0x3094d073 0x308ed000 + 393331
24  UIKit                               0x3094cdcd 0x308ed000 + 392653
25  UIKit                               0x309779c1 0x308ed000 + 567745
26  UIKit                               0x30977011 0x308ed000 + 565265
27  UIKit                               0x309767d9 0x308ed000 + 563161
28  UIKit                               0x30923613 0x308ed000 + 222739
29  UIKit                               0x30923163 0x308ed000 + 221539
30  GraphicsServices                    0x32045a4d 0x32041000 + 19021
31  CoreFoundation                      0x30253041 0x301fd000 + 352321
32  CoreFoundation                      0x30252771 0x301fd000 + 350065
33  GraphicsServices                    0x32044b0f 0x32041000 + 15119
34  GraphicsServices                    0x32044bbb 0x32041000 + 15291
35  UIKit                               0x308f0363 0x308ed000 + 13155
36  UIKit                               0x308ef121 0x308ed000 + 8481
37  Foo                            0x00002097 main (main.m:13)  
Run Code Online (Sandbox Code Playgroud)

arc*_*hgl 8

格雷格的建议,对我来说不起作用,但有助于指出正确的方向让plcrashreporter日志(记者版本103)再次用sdk 4.0进行符号化.

顺便说一句:这是一个问题,你肯定会在新设备(armv7)上创建报告,因为符号假设报告版本103是armv6.

所以这就是我做的......

1)

从最新的symbolicatecrash脚本(sdk 4.0)中复制您所做的更改.注意:根据您使用的编辑器,您可能必须在编辑后设置可执行位. chmod 755 symbolicatecrash


2)问题:找到符号 - 没有匹配

这是因为默认设置为armv6.

解决方案:sub parse_images设置默认架构 my $default_arch = 'armv7';


3)问题:"使用未初始化的值$ bundle ..."

解决方案:(黑客:删除一些似乎不适用于103报告的限制)

更换:

$app = $bundlename if (!defined $app && defined $image{plus} && length $image{plus});
Run Code Online (Sandbox Code Playgroud)

通过:

$app = $bundlename if (!defined $app);
Run Code Online (Sandbox Code Playgroud)

4)问题:"无法理解otool的输出"

解决方案:格雷格的解决方案sub matchesUUID.

更换:

} else { die "Can't understand the output from otool ($TEST_uuid)"; }
Run Code Online (Sandbox Code Playgroud)

通过:

} else { if ($arch eq "armv7") { return matchesUUID($path, $uuid, "armv6"); } else { die "Can't understand the output from otool ($TEST_uuid)"; } }
Run Code Online (Sandbox Code Playgroud)

5)问题:"atos找不到符号"

这里Gregs脚本更改不起作用,

  • 似乎<$ph>rindex(代码突出显示中迷失了方向.
  • "atos无法加载符号"没有被传递到脚本中 - 因此检查不起作用
  • <$ph>rindex(检查读第一线......所以一帧得到的情况下,失去了它是全成.作为一个"黑客",我只是伪造一个带有adreass的框架1......在atos检查期间被"使用".

所以我改变了sub symbolize_frames:

更换:

my $cmd = "$atos -arch $arch -o '$escapedSymbol' @{[ keys %$frames ]} | ";
Run Code Online (Sandbox Code Playgroud)

通过:

my $cmd = "$atos -arch $arch -o '$escapedSymbol' 1 @{[ keys %$frames ]}  2>&1 | ";
Run Code Online (Sandbox Code Playgroud)

更换:

open my($ph),$cmd or die $!;
Run Code Online (Sandbox Code Playgroud)

通过:

open my($ph),$cmd or die $!;
if (rindex(<$ph>, "atos cannot load symbols") != -1 && $arch eq "armv7") {
    my $arch = "armv6"; my $cmd = "$atos -arch $arch -o '$escapedSymbol' @{[ keys %$frames ]}  2>&1 | ";
    print STDERR "Running $cmd\n" if $opt{v};
    open $ph,$cmd or die $!;
}
Run Code Online (Sandbox Code Playgroud)

注意:通过这些更改,脚本运行正常 - "修复"可能不是很优雅,但我不会说流利的perl :) ...


pau*_*erd 1

我知道对于 3.0 SDK,他们将 symbolicatecrash 移到了新位置,我必须获取这个新版本才能使符号映射再次工作。

对于 3.0,可以在以下位置找到:/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

因此,确保您拥有最新版本可能是值得的。我看到我的源函数和 API 函数都有正确的符号映射。