Инструмент Objective-C++ командной строки начал падать в [NSApplication sharedApplication]

У меня есть небольшой CLT для копирования и вставки изображений, написанный на Objective-C++. До недавнего времени эта программа компилировалась и запускалась как задумано - но только сейчас, похоже, она начала зависать при вызове [NSApplication sharedApplication],

Следы стека показывают, что сбой происходит, когда NSApplication инициализирует NSUserDefaults экземпляр, который в конечном итоге вызывает CFDictionary связанная функция (т.е. CFDictionarySetValue) который затем падает free... но изнутри libjemalloc,

Вот пример трассировки стека:

-   Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libjemalloc.2.dylib             0x000000010e7b4ec5 free + 164
1   libjemalloc.2.dylib             0x000000010e7e3d50 zone_free + 168
2   com.apple.CoreFoundation        0x00007fffc5a912c5 __CFBasicHashRehash + 3461
3   com.apple.CoreFoundation        0x00007fffc5a96927 __CFBasicHashAddValue + 103
4   com.apple.CoreFoundation        0x00007fffc5a97a3d CFDictionarySetValue + 221
5   com.apple.CoreFoundation        0x00007fffc5c467da __63-[_CFXPreferences(SearchListAdditions) withSnapshotSearchList:]_block_invoke + 554
6   com.apple.CoreFoundation        0x00007fffc5c4710f -[_CFXPreferences(SearchListAdditions) withSearchLists:] + 79
7   com.apple.CoreFoundation        0x00007fffc5c4655b -[_CFXPreferences(SearchListAdditions) withSnapshotSearchList:] + 155
8   com.apple.CoreFoundation        0x00007fffc5ad08bb __CFXPreferencesCopyCurrentApplicationState + 123
9   com.apple.CoreFoundation        0x00007fffc5ad04dc _CFLocaleCopyCurrentGuts + 268
10  com.apple.CoreFoundation        0x00007fffc5ad0399 +[NSLocale currentLocale] + 9
11  com.apple.Foundation            0x00007fffc7508026 -[NSUserDefaults(NSUserDefaults) init] + 1589
12  com.apple.Foundation            0x00007fffc7507995 +[NSUserDefaults(NSUserDefaults) standardUserDefaults] + 81
13  com.apple.AppKit                0x00007fffc35c9254 +[NSApplication initialize] + 90
14  libobjc.A.dylib                 0x00007fffda9b0b04 CALLING_SOME_+initialize_METHOD + 19
15  libobjc.A.dylib                 0x00007fffda9a16b9 _class_initialize + 579
16  libobjc.A.dylib                 0x00007fffda9a105b lookUpImpOrForward + 240
17  libobjc.A.dylib                 0x00007fffda9a0ad4 _objc_msgSend_uncached + 68
18  impaste                         0x0000000106197198 void objc::run_thread<AXDryRunThread>(NSDictionary*) + 120
19  impaste                         0x0000000106196820 main + 2608
20  libdyld.dylib                   0x00007fffdb294235 start + 1

... Этот последний бит очень любопытен, так как я не использую библиотеку JeMalloc. Ни моя CLT-программа, ни библиотеки, на которых она построена, не имеют никакого отношения к JeMalloc, и система сборки в настоящее время не ссылается на нее вообще. Я ничего не включаю в библиотеку JeMalloc и не связываю с ней что-либо.

Однако: из трассировки стека, похоже, что библиотеки CoreFoundation, которые я использую, на самом деле используют JeMalloc.

Я не знаю много о JeMalloc, но я верю, что он обеспечивает глобальную замену malloc а также free (в дополнение к предоставлению множества пользовательских, детализированных функций управления памятью).

Мой звонок [NSApplication sharedApplication] (как видно на строке № 18 трассировки стека выше) выглядит так:

template <typename OCThreadType> inline
void run_thread(NSDictionary* options = @{}) {
    @autoreleasepool {
        [NSApplication sharedApplication];
        [[[OCThreadType alloc] initWithOptions:options] start];
        AXAppDelegate* delegate = [[AXAppDelegate alloc] init];
        NSApp.delegate = delegate;
        [NSApp run];
    };
}

Может кто-нибудь пролить некоторый свет на это? Что может привести к сбою этой программы таким образом (и, в частности, что могло недавно измениться в CoreFoundation)?

0 ответов

Другие вопросы по тегам