Kscrash: ํ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” KSThread

์— ๋งŒ๋“  2017๋…„ 02์›” 23์ผ  ยท  30์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kstenerud/KSCrash

KSThread.c์—์„œ EXC_BAD_ACCESS

-->if(dispatch_queue_ptr == NULL || idInfo->thread_handle == 0 || *dispatch_queue_ptr == NULL)
{
KSLOG_TRACE("์ด ์Šค๋ ˆ๋“œ์—๋Š” ๋””์ŠคํŒจ์น˜ ํ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค: %p", ์Šค๋ ˆ๋“œ);
๊ฑฐ์ง“์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
}

์ถฉ๋Œ: ์Šค๋ ˆ๋“œ
0 KSCrash 0x10056738c ksthread_getQueueName(KSThread.c:82)
1 KSCrash 0x100567370 ksthread_getQueueName(KSThread.c:75)
2 KSCrash 0x10053f6c8 monitorCachedData(KSCrashCachedData.c:84)
3 libsystem_pthread.dylib 0x18d021850+ 240
4 libsystem_pthread.dylib 0x18d021760 _pthread_start + 282
5 libsystem_pthread.dylib 0x18d01ed94 thread_start + 4

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@HazAT getQueueName ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ์ถฉ๋Œ์˜ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก Pull Request๋ฅผ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  30 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์ง€๊ธˆ ๋‚ด #1 ์ถฉ๋Œ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ํ”„๋กœ์ ํŠธ์˜ ๋‚ด ์ž์‹ ์˜ ์ง€์ ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ง€๋‚œ ๋ช‡ ์ฃผ ๋™์•ˆ (์ƒˆ ์ง์žฅ) ์ผ๋กœ ๋„ˆ๋ฌด ๋ฐ”๋นด์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ PR์„ ํ•˜๋ฉด ๋‚˜๋Š” ๋ณดํ†ต ๊ทธ๊ฒƒ๋“ค์„ ๋น ๋ฅด๊ฒŒ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค!

๊ดœ์ฐฎ ๊ฐ์‚ฌ!

@ferrous777 ์šด์ด ์ข‹์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋˜ํ•œ์ด ์ถฉ๋Œ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ thread_identifier_info_t.dispatch_qaddr dispatch_queue_ptr ๊ฐ€ ๊ฐ€์งœ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ KSThread_Test๋ฅผ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” PR์„ ์ œ์ถœํ–ˆ์ง€๋งŒ(https://github.com/kstenerud/KSCrash/pull/221) ์ด ๊ฐ€์งœ ํฌ์ธํ„ฐ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

e8977a426ab3ef83939a1929c9c4743ae314bcd1์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ญ์ฐธ์กฐ ์ „์— ์œ ํšจํ•œ ํฌ์ธํ„ฐ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ 1.15.5๋กœ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ cocoapods๋กœ ์ถ”์ง„ ์ค‘์ž…๋‹ˆ๋‹ค.

@kstenerud ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ์ปค๋ฐ‹์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ ์ค„์˜ ๊ฒฝ์šฐ:
dispatch_queue_t* dispatch_queue_ptr = (dispatch_queue_t*)idInfo->dispatch_qaddr;

๋นŒ๋“œํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‚˜์š”?

๋™์ผํ•œ ์˜ค๋ฅ˜/์ถฉ๋Œ ๋ฐœ์ƒ, ๋ฒ„์ „:

- KSCrash/Core (1.15.18):
    - KSCrash/Reporting/Filters/Basic
  - KSCrash/Recording (1.15.18):
    - KSCrash/Recording/Tools (= 1.15.18)
  - KSCrash/Recording/Tools (1.15.18)
  - KSCrash/Reporting/Filters/Base (1.15.18):
    - KSCrash/Recording
  - KSCrash/Reporting/Filters/Basic (1.15.18):
    - KSCrash/Recording
    - KSCrash/Reporting/Filters/Base

๋กœ๊ทธ:

[0  KSCrash                        0x102e22754 ksthread_getQueueName + 132
1  KSCrash                        0x102e22738 ksthread_getQueueName + 104
2  KSCrash                        0x102e0a4c0 monitorCachedData + 288
3  libsystem_pthread.dylib        0x185bac2b4 _pthread_body + 308
4  libsystem_pthread.dylib        0x185bac180 _pthread_body + 310
5  libsystem_pthread.dylib        0x185baab74 thread_start + 4]

๋ฐฉ๊ธˆ KSCrash 1.15.18์—์„œ ๋™์ผํ•œ ์ถฉ๋Œ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Thread 2 Crashed:
0   KSCrash                         0x0000000103052280 ksthread_getQueueName + 320128 (KSThread.c:87)
1   KSCrash                         0x0000000103052268 ksthread_getQueueName + 320104 (KSThread.c:80)
2   KSCrash                         0x000000010302b050 monitorCachedData + 159824 (KSCrashCachedData.c:139)
3   libsystem_pthread.dylib         0x0000000182d6c31c 0x182d6a000 + 8988 ( + 308)
4   libsystem_pthread.dylib         0x0000000182d6c1e8 0x182d6a000 + 8680 (_pthread_start + 312)

์ถฉ๋Œ์€ OP์— ๋”ฐ๋ผ ์ด ์ค„์— ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.

if(dispatch_queue_ptr == NULL || idInfo->thread_handle == 0 || *dispatch_queue_ptr == NULL)

CrashDoctor ๋ณด๊ณ :

CrashDoctor Diagnosis: Attempted to dereference garbage pointer 0x16da23180.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ต๊ณ„๋Š” ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ด ์กฐ์‚ฌ์— ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค!

idInfo ๊ฐ€ ์ถฉ๋Œ ์‚ฌ์ดํŠธ ์œ„์˜ ๋ผ์ธ 79์—์„œ ์—ญ์ฐธ์กฐ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์€ dispatch_queue_ptr ์—ญ์ฐธ์กฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 80ํ–‰์— ์žˆ๋Š” dispatch_queue_ptr ์˜ ksmem_isMemoryReadable ๊ฒ€์‚ฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ksmem_isMemoryReadable ๋ฐ ํ•ด๋‹น ํ˜ธ์ถœ ์ˆ˜์‹ ์ž๊ฐ€ ์•„์ง ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ์ง€๊ธˆ ๋ง‰ํ˜”์Šต๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”, Sentry๊ฐ€ ์žˆ๋Š” ์•ฑ ์ค‘ ํ•˜๋‚˜์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

KSCrash
0x100faa834
ksthread_getQueueNameKSCrash/์†Œ์Šค/KSCrash/๋…น์Œ/๋„๊ตฌ/KSThread.c:87
KSCrash
0x100f925a0
updateThreadListKSCrash/Source/KSCrash/Recording/KSCrashCachedData.c:84
KSCrash
0x100f925a0
monitorCachedDataKSCrash/Source/KSCrash/Recording/KSCrashCachedData.c:137

Podfile.lock:

  • KSCrash/๋…น์Œ(1.15.18):
    ...

์ตœ์ƒ์˜

@oleksandrlysenkov ์ถฉ๋Œ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Kmohamed ๊ฐœ์ธ์ ์œผ๋กœ ๋‚ด ์žฅ์น˜์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋งค์ผ ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ Crashlytics ๋กœ๊ทธ์ธ์„ ์ˆ˜์‹ ํ•˜๊ณ  ํ˜„์žฌ ๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ 2๊ฐœ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ถฉ๋Œ์ž…๋‹ˆ๋‹ค.

@oleksandrlysenkov ์™œ KSCrash ๋ฐ Crashlytics๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐฉ๊ธˆ ๋‚˜์—๊ฒŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค! ์•ฑ์„ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜ํ•  ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์ „ํ™˜๋˜๋Š” ์ฆ‰์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ถฉ๋Œ์ฒ˜๋Ÿผ UI๊ฐ€ ์ž ์‹œ ๋‚˜ํƒ€๋‚ฌ๋‹ค๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๊ทธ๊ฒƒ์€ ๊ธฐํ˜ธ๊ฐ€ ์—†๋Š” ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์— ์žˆ์—ˆ์ง€๋งŒ ์Šค๋ ˆ๋“œ 0์˜ ์Šคํƒ ์ถ”์ ๊ณผ ์ถฉ๋Œํ•˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ์•ฑ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: 0x00000000 at 0x000000016c2e7180
Crashed Thread:  2

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   QuartzCore                      0x00000001882086c8 CA::Layer::mark_context_changed+ 1222344 (CA::Transaction*) + 48
1   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
2   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
3   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
4   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
5   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
6   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
7   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
8   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
9   QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
10  QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
11  QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
12  QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
13  QuartzCore                      0x000000018820872c CA::Layer::mark_context_changed+ 1222444 (CA::Transaction*) + 148
14  QuartzCore                      0x0000000188210078 CA::Layer::set_visible+ 1253496 (unsigned int) + 268
15  QuartzCore                      0x0000000188170790 CA::Context::set_layer+ 599952 (void const*) + 228
16  UIKit                           0x000000018dc57818 +[_UIContextBinder createContextForBindable:withSubstrate:] + 1080
17  UIKit                           0x000000018dc57380 -[_UIContextBinder _contextForBindable:] + 132
18  UIKit                           0x000000018dc22dc8 -[_UIContextBinder updateBindableOrderWithTest:force:] + 472
19  UIKit                           0x000000018dc22a14 -[_UIContextBinder createContextsWithTest:creationAction:] + 100
20  UIKit                           0x000000018dc25bb4 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 784
21  UIKit                           0x000000018e8bb72c __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 296
22  UIKit                           0x000000018dc25268 -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 432
23  UIKit                           0x000000018e6a09b8 __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 220
24  UIKit                           0x000000018e7eeae8 _performActionsWithDelayForTransitionContext + 112
25  UIKit                           0x000000018dc24c88 -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 248
26  UIKit                           0x000000018dc24624 -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 368
27  UIKit                           0x000000018dc623b0 -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 468
28  FrontBoardServices              0x0000000186888f24 __80-[FBSSceneImpl updater:didUpdateSettings:withDiff:transitionContext:completion:]_block_invoke.362 + 212
29  libdispatch.dylib               0x000000018397cae4 _dispatch_client_callout + 16
30  libdispatch.dylib               0x00000001839b8b0c _dispatch_block_invoke_direct$VARIANT$armv81 + 216
31  FrontBoardServices              0x00000001868bc878 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
32  FrontBoardServices              0x00000001868bc51c -[FBSSerialQueue _performNext] + 404
33  FrontBoardServices              0x00000001868bcab8 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
34  CoreFoundation                  0x0000000184033404 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
35  CoreFoundation                  0x0000000184032c2c __CFRunLoopDoSources0 + 276
36  CoreFoundation                  0x000000018403079c __CFRunLoopRun + 1204
37  CoreFoundation                  0x0000000183f50da8 CFRunLoopRunSpecific + 552
38  GraphicsServices                0x0000000185f33020 GSEventRunModal + 100
39  UIKit                           0x000000018df3178c UIApplicationMain + 236
40  Charles                         0x00000001048e51b8 0x10471c000 + 1872312 (main + 76)
41  libdyld.dylib                   0x00000001839e1fc0 start + 4

Thread 2 Crashed:
0   KSCrash                         0x00000001053da84c 0x105358000 + 534604 (ksthread_getQueueName + 280)
1   KSCrash                         0x00000001053da828 0x105358000 + 534568 (ksthread_getQueueName + 244)
2   KSCrash                         0x0000000105397bb0 0x105358000 + 261040 (updateThreadList + 436)
3   KSCrash                         0x0000000105397710 0x105358000 + 259856 (monitorCachedData + 56)
4   libsystem_pthread.dylib         0x0000000183cb1220 _pthread_body + 272
5   libsystem_pthread.dylib         0x0000000183cb1110 _pthread_body + 0

Thread 3 name:  KSCrash Exception Handler (Secondary)
Thread 3:
0   libsystem_kernel.dylib          0x0000000183aefe08 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000183aefc80 mach_msg + 72
2   KSCrash                         0x00000001053a465c 0x105358000 + 312924 (handleExceptions + 268)
3   libsystem_pthread.dylib         0x0000000183cb1220 _pthread_body + 272
4   libsystem_pthread.dylib         0x0000000183cb1110 _pthread_body + 0

Thread 4 name:  KSCrash Exception Handler (Primary)
Thread 4:

@Kmohamed ์šฐ๋ฆฌ๋Š” XCGLogger์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ ๋‚ด๋ถ€์—์„œ Fabric ๋ฐ KSCrash์™€ ํ•จ๊ป˜ ์ผ๋ฐ˜์ ์ธ ์ถฉ๋Œ ๋กœ๊น…์„ ์œ„ํ•ด Crashlytics๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Crashlytics์—์„œ Sentry๋กœ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  Crashlattics ์†Œ์Šค๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œ์€ XCode=>Organizer=>Crashes :: AppStore=> (๋ฆด๋ฆฌ์ฆˆ๋œ ๋ฒ„์ „) => KSCrash ...์—๋„ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ 3์˜ ๋ชจ๋“  ํ•ญ๋ชฉ, KSCrash ksthread_getQueueName์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

//thread_handle shouldn't be 0 also, because
    //identifier_info->dispatch_qaddr =  identifier_info->thread_handle + get_dispatchqueue_offset_from_proc(thread->task->bsd_info);
    if(dispatch_queue_ptr == NULL || idInfo->thread_handle == 0 || *dispatch_queue_ptr == NULL)
    {
        KSLOG_TRACE("This thread doesn't have a dispatch queue attached : %p", thread);
        return false;
    }

์ด ๋ฌธ์ œ๋Š” ํ•˜๋ฃจ์— 10-20๋ฒˆ Sentry์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

"๊ฐ€๋น„์ง€ ํฌ์ธํ„ฐ 0x16b717180์„ ์—ญ์ฐธ์กฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค."

๋ชจ๋“  ์žฅ์น˜์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ๋ฉ”๋ชจ๋ฆฌ | ์ด: 1.9GB / ๋ฌด๋ฃŒ: 55.8MB / ์‚ฌ์šฉ ๊ฐ€๋Šฅ: 1.7GB
100MB ๋ฏธ๋งŒ์˜ ๋ชจ๋“  ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ ๋Œ€๋ถ€๋ถ„ 50MB ๋ฏธ๋งŒ

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์˜ Sentry ์ถ”๊ฐ€ Logging with Breadcrumbs๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

  1. AppDelegate applicationDidEnterBackground () // OOM ์•ฑ ์ข…๋ฃŒ๋กœ ์ธํ•ด ๋ฐœ์ƒ ํ–ˆ์Šต๋‹ˆ๊นŒ?
    ๋•Œ๋•Œ๋กœ: 1b. AppDelegate ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜...
  2. ๊ฐ€๋น„์ง€ ์—ญ์ฐธ์กฐ ์‹œ๋„ => CRASH ๋งˆ์ง€๋ง‰ AppDelegate ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™์ผํ•œ ํƒ€์ž„์Šคํƒฌํ”„...
    EXC_BAD_ACCESS
    ๊ฐ€๋น„์ง€ ํฌ์ธํ„ฐ 0x16c0ab180์„ ์—ญ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ... ๋‹ค์–‘ํ•œ ์‹œ๊ฐ„ ์‚ฌ์ด
  3. ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด

๋•Œ๋•Œ๋กœ(๋ชจ๋“  ๋ณด๊ณ ์„œ์˜ 40-50%) ์ถฉ๋Œ์ด AppDelegate applicationWillResignActive์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๋‘ ๋ฒˆ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์„ธ ๋ฒˆ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋จน๋Š” ๋‘ ๋ฒˆ์งธ ์ „๊ฒฝ ์•ฑ์œผ๋กœ OOM ์•ฑ ์ข…๋ฃŒ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ค‘์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ์ฒ˜์Œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žฅ์น˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ˆ๋ฐ˜์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

-(void)eatMemoryBigChunck
{
    NSLog(@"Eating eatMemoryBigChunck");
    unsigned long dinnerLength = 1024 * 1024 * 500;
...

์žฅ์น˜์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ํ˜ธ์ŠคํŠธ Mac๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kstenerud ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋” ๋‚˜์€ ๊ฒƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ด๊ฒƒ์ด ์ด ์ถฉ๋Œ์— ๋Œ€ํ•œ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. #281

์ถฉ๋Œ์ด ์—ฌ์ „ํžˆ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. @kstenerud ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์กฐ์‚ฌ ํ›„ ํ•ด๋‹น ์ถฉ๋Œ์ด ๋ฒ„์ „ 1.15.16์—์„œ 1.15.18๋กœ ์—…๋ฐ์ดํŠธํ•œ ์งํ›„์— ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ObjC์— ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š์ง€๋งŒ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ถฉ๋Œ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค - http://prntscr.com/jdpc70 http://prntscr.com/jdpcrd
์ถฉ๋Œ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด ๋งํฌ: http://crashes.to/s/149088e734b

@Kmohamed ๊ท€ํ•˜์˜ Pull ์š”์ฒญ์ด ๋‚ด ์•ฑ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ KSCrash.c์˜ โ€‹โ€‹94ํ–‰์— ์žˆ์ง€๋งŒ ์ถฉ๋Œ์€ 87ํ–‰์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ KSCrash ๋ฒ„์ „ 1.15.16์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ iTunes Connect์˜ ์ถฉ๋Œ ๋ณด๊ณ ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ „์— ๋ณธ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด.

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016d813180
VM Region Info: 0x16d813180 is not in any region.  Bytes after previous region: 553345  Bytes before following region: 20096
      REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      Stack                  000000016d690000-000000016d78c000 [ 1008K] rw-/rwx SM=PRV  thread 0
--->  GAP OF 0x8c000 BYTES
      Stack Guard            000000016d818000-000000016d81c000 [   16K] ---/rwx SM=NUL  

Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
Triggered by Thread:  2

Thread 2 Crashed:
0   KSCrash                         0x0000000102d42280 ksthread_getQueueName + 128 (KSThread.c:87)
1   KSCrash                         0x0000000102d42268 ksthread_getQueueName + 104 (KSThread.c:80)
2   KSCrash                         0x0000000102d1b050 monitorCachedData + 288 (KSCrashCachedData.c:84)
3   libsystem_pthread.dylib         0x0000000181825220 _pthread_body + 272 (pthread.c:740)
4   libsystem_pthread.dylib         0x0000000181825110 _pthread_start + 292 (pthread.c:799)
5   libsystem_pthread.dylib         0x0000000181823b10 thread_start + 4

์ €๋„ ์š”
์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!!

์ด๊ฒƒ์€ ๋˜ํ•œ ํ˜„์žฌ ์šฐ๋ฆฌ์˜ 1์œ„ ์ถฉ๋Œ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด ์•ฑ์˜ ์ƒ์œ„ 1๊ฐœ ์ถฉ๋Œ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. Sentry๋ฅผ ํ†ตํ•ด ๋•Œ๋•Œ๋กœ ์ด ์ถฉ๋Œ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์„ธ๋ถ€:

OS Version: iOS 11.3.1 (15E302)
Report Version: 104

Crashed Thread: 2

Application Specific Information:
Attempted to dereference garbage pointer 0x16dc8f180.

Thread 2 Crashed:
0   KSCrash                         0x10282dba8         ksthread_getQueueName (KSThread.c:87)
1   KSCrash                         0x102815a38         [inlined] updateThreadList (KSCrashCachedData.c:84)
2   KSCrash                         0x102815a38         monitorCachedData (KSCrashCachedData.c:137)
3   libsystem_pthread.dylib         0x305450220         <redacted>
4   libsystem_pthread.dylib         0x305450110         _pthread_start

@WingedDoom @xlbs-rm sentry-cocoa 4.x.x ์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ KSCrash์—์„œ ์ง์ ‘ ์ˆ˜์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@HazAT ์˜ค, ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์„ผํŠธ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@HazAT getQueueName ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด ์ถฉ๋Œ์˜ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก Pull Request๋ฅผ ์ƒ์„ฑํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@harp79 ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํŒŒํ—ค์น  ์‹œ๊ฐ„์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

Sentry-Cocoa 4.1.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•„์ง๋„ ์ด๊ฒƒ์„ ๊ฐ€๋กœ์งˆ๋Ÿฌ ๋‹ฌ๋ฆฌ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Crashlytics์—์„œ ๋ณด๊ณ ํ•œ 1์œ„(์–ด๋–ค ์ด์œ ๋กœ๋“  6์œ„) ํฌ๋ž˜์‹œ

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

๋‚ด ์ดํ•ด๋Š” Sentry 4.1.0์ด ๋” ์ด์ƒ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰