クラッシュレポートから取得したスタックアドレスから正確なシンボルアドレスを計算する方法を見つけようとしてきました。私は次の式を見つけました:https ://stackoverflow.com/a/12464678/920407
そして、私が見つけたアドレスを計算するツールを使ってみました:https ://github.com/nob1984/natos
しかし、エラーマージンは比較的小さかったものの、これらの方法はどちらも機能しませんでした。エラーが発生した実際の行の約3〜4行前です。
NSArrayオブジェクトの境界をオーバーシュートして、アプリを意図的にクラッシュさせました。これが私の結果です:
クラッシュレポート:
0 CoreFoundation 0x36bf688f __exceptionPreprocess + 163
1 libobjc.A.dylib 0x3300d259 objc_exception_throw + 33
2 CoreFoundation 0x36b4e23d -[__NSArrayI objectAtIndex:] + 165
3 SomeApp 0x0013cea3 -[DashboardTableViewController tableView:didSelectRowAtIndexPath:] (DashboardTableViewController.m:970)
4 UIKit 0x34e7993d -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 945
5 UIKit 0x34ef3627 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 159
6 Foundation 0x32829933 __NSFireDelayedPerform + 415
7 CoreFoundation 0x36bcaa33 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15
8 CoreFoundation 0x36bca699 __CFRunLoopDoTimer + 365
9 CoreFoundation 0x36bc926f __CFRunLoopRun + 1207
10 CoreFoundation 0x36b4c4a5 CFRunLoopRunSpecific + 301
11 CoreFoundation 0x36b4c36d CFRunLoopRunInMode + 105
12 GraphicsServices 0x34d13439 GSEventRunModal + 137
13 UIKit 0x34df5cd5 UIApplicationMain + 1081
14 SomeApp 0x00146587 main (main.m:17)
15 SomeApp 0x00102008 start + 40
natos出力:
Main Stack Address == 0x146587
Target Stack Address == 0x13cea3
Slide == 0x1000
Main Symbol Address == 0x4751c
Load Address == 0x10006b
Target Symbol Address == 0x3de38
dwarfdump output:
(null)
atos output:
-[DashboardTableViewController tableView:viewForHeaderInSection:] (in SomeApp) (DashboardTableViewController.m:966)
Apple Crashレポートには、コード行は実際には966ではなく970にあると記載されているため、このエラーの原因と、アドレスを正しく計算するために何を使用すればよいのでしょうか。