簡體   English   中英

將調用符號化為macOS系統庫?

[英]Symbolicate calls into macOS system libraries?

我正在使用macOS應用程序,該應用程序使用Google Crashpad將客戶崩潰報告上傳回給我們。 該工具生成的故障轉儲在我們的應用程序中具有完整的符號,但在系統庫中則沒有。

這與/ Library / Logs / DiagnosticReports中的崩潰文件相反,該文件具有系統庫的符號,但通常不包含崩潰的應用程序的符號。

我的問題是,如何在系統庫中符號化函數調用? 我已經為我使用內置自己的應用程序做到這一點atos和捆綁的dSYM。 但是,我在查找有關如何針對系統庫執行此操作的文檔時遇到了麻煩。

Crashpad的文檔不是很有啟發性,因為它主要針對Linux和Windows: https ://www.chromium.org/developers/decoding-crash-dumps

但是,從理論上講,我應該能夠做到這一點(畢竟,macOS的系統崩潰服務會在生成自己的報告時做到這一點-或者,也許我只需要從Xcode SDK傳遞一些調試信息到atos ?)

這是一個示例轉儲,其中刪除了對我的應用程序的引用。

Operating system: Mac OS X
                  10.9.5 13F1911
CPU: amd64
     family 6 model 42 stepping 7
     4 CPUs

GPU: UNKNOWN

Crash reason:  EXC_BREAKPOINT / EXC_I386_BPT
Crash address: 0x7fff669d609d
Process uptime: 3 seconds

Thread 8 (crashed)
 0  dyld + 0x109d
    rax = 0x00007fff66a0adb0   rdx = 0x0000000000000000
    rcx = 0x0000000000000000   rbx = 0x00007fd96a50de60
    rsi = 0x0000000000000000   rdi = 0x00007fff66a0af20
    rbp = 0x000000010c2ee700   rsp = 0x000000010c2ee6e8
     r8 = 0x00007fff669f5b8c    r9 = 0x0000000000000000
    r10 = 0x00007fff669f8d26   r11 = 0x00007fff66a0af20
    r12 = 0x005b327ab9000001   r13 = 0x0000000000000000
    r14 = 0x00007fff66a0af20   r15 = 0x00007fd96a508d10
    rip = 0x00007fff669d609d
    Found by: given as instruction pointer in context
 1  dyld + 0x3df6
    rbp = 0x000000010c2ee720   rsp = 0x000000010c2ee710
    rip = 0x00007fff669d8df6
    Found by: previous frame's frame pointer
 2  libdyld.dylib + 0x12dd
    rbp = 0x000000010c2ee870   rsp = 0x000000010c2ee730
    rip = 0x00007fff86d462dd
    Found by: previous frame's frame pointer
 3  0x109d90008
    rbp = 0x000000010c2ee8d0   rsp = 0x000000010c2ee880
    rip = 0x0000000109d90008
    Found by: previous frame's frame pointer
[...]
Loaded modules:
[...]
0x7fff669d5000 - 0x7fff66a08fff  dyld  0.0.0.0  (WARNING: No symbols, dyld, 1D3130FEFE7E3C4C8E74EB51895B6BA50)
0x7fff83520000 - 0x7fff83593fff  SecurityFoundation  55122.3.0.0
0x7fff8362d000 - 0x7fff837e5fff  libicucore.A.dylib  51.1.0.0
0x7fff837e6000 - 0x7fff8380dfff  libsystem_info.dylib  449.1.4.0
0x7fff83abf000 - 0x7fff83accfff  libxar.1.dylib  1.0.0.0
0x7fff83c04000 - 0x7fff83c0bfff  liblaunch.dylib  842.92.1.0
0x7fff83c0c000 - 0x7fff83cd6fff  LaunchServices  572.32.0.0
0x7fff83dd2000 - 0x7fff83dd6fff  libGIF.dylib  1.0.0.0
0x7fff83e12000 - 0x7fff83e42fff  libncurses.5.4.dylib  5.4.0.0
0x7fff841ae000 - 0x7fff8423efff  Metadata  800.30.0.0
0x7fff842d4000 - 0x7fff842d5fff  libremovefile.dylib  33.0.0.0
0x7fff84387000 - 0x7fff84475fff  libJP2.dylib  1.0.0.0
0x7fff84476000 - 0x7fff84481fff  libkxld.dylib  1.0.0.0
0x7fff844a0000 - 0x7fff844a8fff  libsystem_dnssd.dylib  522.92.3.0
0x7fff846b4000 - 0x7fff846cbfff  CFOpenDirectory  1.0.0.0
0x7fff84e1c000 - 0x7fff851fdfff  libLAPACK.dylib  1.0.0.0
0x7fff85bd0000 - 0x7fff85c92fff  CoreText  1.0.0.0
0x7fff85c93000 - 0x7fff85ce0fff  PrintCore  428.0.0.0
0x7fff85d6d000 - 0x7fff85de4fff  OSServices  600.4.0.0
0x7fff85de5000 - 0x7fff85deffff  ServiceManagement  1.0.0.0
0x7fff85e38000 - 0x7fff85e53fff  libCRFSuite.dylib  1.0.0.0
0x7fff85e84000 - 0x7fff85e84fff  libkeymgr.dylib  28.0.0.0
0x7fff85e85000 - 0x7fff85e89fff  libheimdal-asn1.dylib  1.0.0.0
0x7fff85ea1000 - 0x7fff85ea8fff  libcopyfile.dylib  103.92.1.0
0x7fff85ea9000 - 0x7fff85eb9fff  libbsm.0.dylib  1.0.0.0
0x7fff85eba000 - 0x7fff85ec1fff  libsystem_pthread.dylib  53.1.4.0  (WARNING: No symbols, libsystem_pthread.dylib, AB498556B555310E9041F67EC9E00E2C0)
0x7fff85ec2000 - 0x7fff85ec2fff  CoreServices  59.0.0.0
0x7fff85f20000 - 0x7fff85f27fff  NetFS  1.0.0.0
0x7fff864b2000 - 0x7fff864bdfff  NetAuth  1.0.0.0
0x7fff864e1000 - 0x7fff86751fff  Security  55471.14.40.0
0x7fff867a4000 - 0x7fff867adfff  libsystem_notify.dylib  121.20.1.0
0x7fff867d7000 - 0x7fff867dcfff  libunwind.dylib  35.3.0.0
0x7fff86813000 - 0x7fff86815fff  libquarantine.dylib  71.0.0.0
0x7fff86816000 - 0x7fff86827fff  libsystem_asl.dylib  217.1.4.0
0x7fff86887000 - 0x7fff868abfff  libxpc.dylib  300.90.2.0
0x7fff869ad000 - 0x7fff86aa7fff  libFontParser.dylib  1.0.0.0
0x7fff86ad3000 - 0x7fff86b2cfff  libTIFF.dylib  1.0.0.0
0x7fff86b69000 - 0x7fff86cbdfff  AudioToolbox  492.0.0.0
0x7fff86d45000 - 0x7fff86d48fff  libdyld.dylib  239.5.0.0  (WARNING: No symbols, libdyld.dylib, CAE7A50DF1563D4781C0DC41EB975D380)
0x7fff878c0000 - 0x7fff8792dfff  ATS  236.0.0.0
0x7fff8794d000 - 0x7fff8794dfff  vecLib  423.32.0.0
0x7fff87efb000 - 0x7fff87f40fff  HIServices  468.0.0.0
0x7fff87f4c000 - 0x7fff87f56fff  libcommonCrypto.dylib  60049.0.0.0
0x7fff88229000 - 0x7fff8823afff  libz.1.dylib  1.2.5.0
0x7fff8841f000 - 0x7fff88421fff  libsystem_configuration.dylib  596.15.0.0
0x7fff88422000 - 0x7fff88423fff  libsystem_sandbox.dylib  278.11.2.0
0x7fff8842b000 - 0x7fff8842bfff  ApplicationServices  48.0.0.0
0x7fff88441000 - 0x7fff88442fff  TrustEvaluationAgent  25.0.0.0
0x7fff8848a000 - 0x7fff884a5fff  libsystem_malloc.dylib  23.10.1.0  (WARNING: No symbols, libsystem_malloc.dylib, A695B4E438E9332EA77229D31E3F13850)
0x7fff884a9000 - 0x7fff8859afff  libiconv.2.dylib  7.0.0.0
0x7fff886d0000 - 0x7fff886dcfff  OpenDirectory  1.0.0.0
0x7fff88758000 - 0x7fff887a6fff  libcorecrypto.dylib  1.0.0.0
0x7fff887d2000 - 0x7fff8885bfff  ColorSync  4.7.0.0
0x7fff89c2a000 - 0x7fff89c43fff  Kerberos  6.0.0.0
0x7fff89c44000 - 0x7fff89c45fff  liblangid.dylib  1.0.0.0
0x7fff89ea8000 - 0x7fff89eadfff  libmacho.dylib  845.0.0.0
0x7fff8a24a000 - 0x7fff8a266fff  libsystem_kernel.dylib  2422.115.15.0  (WARNING: No symbols, libsystem_kernel.dylib, 34ABAF79E1473C34B05D46A566E689CC0)
0x7fff8a278000 - 0x7fff8a328fff  libvMisc.dylib  423.32.0.0
0x7fff8a342000 - 0x7fff8a3a5fff  SystemConfiguration  596.15.0.0
0x7fff8a425000 - 0x7fff8a42efff  CommonAuth  1.0.0.0
0x7fff8a5a7000 - 0x7fff8a5d0fff  libc++abi.dylib  49.1.0.0
0x7fff8a5d1000 - 0x7fff8a5edfff  libresolv.9.dylib  1.0.0.0
0x7fff8a6eb000 - 0x7fff8a71afff  libsystem_m.dylib  3047.16.0.0
0x7fff8a730000 - 0x7fff8a757fff  libsystem_network.dylib  241.4.0.0
0x7fff8abd1000 - 0x7fff8abf5fff  libJPEG.dylib  1.0.0.0
0x7fff8ad46000 - 0x7fff8b01afff  vImage  271.0.0.0
0x7fff8b20b000 - 0x7fff8b294fff  libsystem_c.dylib  997.90.5.0  (WARNING: No symbols, libsystem_c.dylib, 889AA3F9121C39858B1D5E908C5693BC0)
0x7fff8b4ac000 - 0x7fff8b4b0fff  libsystem_stats.dylib  93.90.3.0
0x7fff8b569000 - 0x7fff8b578fff  LangAnalysis  1.0.0.0
0x7fff8b579000 - 0x7fff8b579fff  Accelerate  4.0.0.0
0x7fff8bca4000 - 0x7fff8bcbffff  libPng.dylib  1.0.0.0
0x7fff8bccd000 - 0x7fff8bccdfff  libOpenScriptingUtil.dylib  1.0.0.0
0x7fff8be35000 - 0x7fff8c75efff  CoreGraphics  600.0.0.0
0x7fff8cac1000 - 0x7fff8cb08fff  libFontRegistry.dylib  1.0.0.0
0x7fff8cbaf000 - 0x7fff8cbb0fff  libsystem_blocks.dylib  63.0.0.0
0x7fff8d035000 - 0x7fff8d03bfff  libsystem_platform.dylib  24.90.1.0
0x7fff8d03c000 - 0x7fff8d03ffff  IOSurface  1.0.0.0
0x7fff8d071000 - 0x7fff8d371fff  Foundation  1056.17.0.0
0x7fff8d372000 - 0x7fff8d3d6fff  DataDetectorsCore  354.5.0.0
0x7fff8d4fd000 - 0x7fff8d4fffff  libRadiance.dylib  1.0.0.0
0x7fff8d500000 - 0x7fff8d501fff  libDiagnosticMessagesClient.dylib  1.0.0.0
0x7fff8df59000 - 0x7fff8df66fff  libbz2.1.0.dylib  1.0.5.0
0x7fff8e11e000 - 0x7fff8e127fff  SpeechSynthesis  1.0.0.0
0x7fff8e1df000 - 0x7fff8e2c9fff  libsqlite3.dylib  158.0.0.0
0x7fff8e2ca000 - 0x7fff8e2cdfff  TCC  1.0.0.0
0x7fff8e2ce000 - 0x7fff8e2cffff  libSystem.B.dylib  1197.1.1.0
0x7fff8e32c000 - 0x7fff8e387fff  AE  665.6.0.0
0x7fff8ea6a000 - 0x7fff8ea92fff  libxslt.1.dylib  3.26.0.0
0x7fff8ea93000 - 0x7fff8eb7bfff  libxml2.2.dylib  10.9.0.0
0x7fff8eb86000 - 0x7fff8ebebfff  Heimdal  1.0.0.0
0x7fff8ec48000 - 0x7fff8ef32fff  CarbonCore  1077.17.0.0
0x7fff8ef33000 - 0x7fff8f03afff  ImageIO  1.0.0.0
0x7fff8f0c1000 - 0x7fff8f12dfff  IOKit  275.0.0.0
0x7fff8f21e000 - 0x7fff8f3cbfff  libobjc.A.dylib  228.0.0.0
0x7fff8f58c000 - 0x7fff8f58dfff  libunc.dylib  28.0.0.0
0x7fff8f58e000 - 0x7fff8f659fff  libvDSP.dylib  423.32.0.0
0x7fff8f65a000 - 0x7fff8f674fff  libdispatch.dylib  339.92.1.0  (WARNING: No symbols, libdispatch.dylib, C4E4A18D3C3B3C9C8709A4270D998DE70)
0x7fff8f71f000 - 0x7fff8f771fff  libc++.1.dylib  120.0.0.0
0x7fff8fca0000 - 0x7fff8fcd9fff  QD  298.0.0.0
0x7fff8ff1e000 - 0x7fff8ff22fff  libcache.dylib  62.0.0.0
0x7fff8ff23000 - 0x7fff8ff65fff  libauto.dylib  1.0.0.0
0x7fff8ff66000 - 0x7fff8ff6dfff  libcompiler_rt.dylib  35.0.0.0
0x7fff8ff71000 - 0x7fff8ff75fff  libpam.2.dylib  3.0.0.0
0x7fff902c7000 - 0x7fff90318fff  CoreAudio  1.0.0.0
0x7fff90319000 - 0x7fff9031efff  DiskArbitration  1.0.0.0
0x7fff903aa000 - 0x7fff90545fff  CFNetwork  673.6.0.0
0x7fff90546000 - 0x7fff9056ffff  DictionaryServices  1.0.0.0
0x7fff905ee000 - 0x7fff907d3fff  CoreFoundation  855.17.0.0
0x7fff90833000 - 0x7fff909a1fff  libBLAS.dylib  1.0.0.0
0x7fff90c01000 - 0x7fff90c48fff  libcups.2.dylib  2.10.0.0
0x7fff90c49000 - 0x7fff90c78fff  GSS  1.0.0.0
0x7fff90c79000 - 0x7fff90ce6fff  SearchKit  200.1.0.0

我對Crashpad並不是很熟悉,但是通過查看該報告,我認為我對發生的事情有所了解。

一般而言,您的符號化過程適用於您的圖書館或Apple的任何圖書館。 您只需要將atos指向符號源,給它加載地址+偏移量就可以了。 dSYM是很好的源,但是可執行文件也可以是源。

但是,關鍵部分是可以訪問符號源,該符號源發生崩潰時加載到您的進程中的庫的版本相匹配 為了幫助完成此過程,Apple平台上的二進制文件由UUID標識。 您可以使用dwarfdump -u /path/to/binary讀取此uuid。

一種方法是僅在發生崩潰的設備上嘗試符號化過程。 這就是ReportCrash的工作方式。 而且,為什么它可以象征蘋果的二進制文件。 我認為它對您的應用程序無效的原因是您從工件中剝離了符號。

但是,以這種方式進行符號化有一些缺點。 一個大問題是您通常無法使用dSYM。 dSYM包含更多的信息,而不僅僅是address-> Symbol info。 因此,如果可以的話,您絕對想使用它們。

另一種方法是在事實之后進行符號化,僅使用報告中的數據。 這樣做的最大問題是您仍然需要訪問符號源。 根據您再次發布的報告,Crashpad的符號系統似乎可以找到/加載dyld符號。 有用的是,它包括該特定二進制文件的uuid。 但是,如果您沒有碰巧附帶10.9.5(13F1911)附帶的行業副本,那您就不走運了。 甚至無法訪問10.9版的macOS SDK,因為您需要特定的構建。

鑒於CrashPad生成了針對如此少的二進制文件的警告,似乎它至少應該嘗試進行一些符號化。 也許需要一些額外的配置? 我知道Apple早在幾年前就對符號查找API進行了一些修改(我相信是iOS 7時間框架),這使設備上的符號化過程更加復雜。 從那以后可能沒有更新過CrashPad嗎?

這是托管崩潰報告系統存在的原因之一。 Crashlytics(我曾經使用的一項服務)會為所有平台的每個Apple OS版本編制索引,以便它可以執行高質量的服務器端符號來確切地解決此問題。 還有很多其他服務。 您是否考慮過托管解決方案?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM