CoreAnalytics::Client FrameworkConfiguration::init内部神秘崩溃

问题描述 投票:0回答:1

我遇到了一个奇怪的崩溃,证明很难调试。 我可以随意触发它,在启动我的应用程序后立即触发,只需按下并释放命令键几次;不需要与我的应用程序进行其他交互。 不用说,当命令键改变状态时,我的应用不会做任何事情。 实际上,其他按键也会触发崩溃,包括字母键;Command除了看起来不太可能有其他副作用外,并没有什么特别的地方。

崩溃总是在一个后台线程中,总是有同样的回溯,其中不包含任何我的代码。

#0  0x00007fff603da3ec in __cxa_throw ()
#1  0x00007fff42e90492 in nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::parser::unexpect(nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::lexer::token_type) const ()
#2  0x00007fff42e8ccad in nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::parser::parse_internal(bool) ()
#3  0x00007fff42e8fe63 in nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::parser::parse() ()
#4  0x00007fff42e8fcd4 in nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer> nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::parse<char const*, 0>(char const*, char const*, std::__1::function<bool (int, nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>::parse_event_t, nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer>&)>) ()
#5  0x00007fff42e826be in FrameworkConfiguration::init() ()
#6  0x00007fff42e82478 in FrameworkConfiguration::create(applesauce::xpc::object) ()
#7  0x00007fff42e82100 in CoreAnalytics::Client::handleConfigurationChange_sync(applesauce::xpc::dict const&) ()
#8  0x00007fff42e81f52 in CoreAnalytics::Client::handleServerMessage_sync(applesauce::xpc::dict) ()
#9  0x00007fff42e94039 in ___ZZN13CoreAnalytics6Client4initEvENK3$_1clEv_block_invoke ()
#10 0x00007fff634b8a54 in _xpc_connection_call_event_handler ()
#11 0x00007fff634b795c in _xpc_connection_mach_event ()
#12 0x000000010040482f in _dispatch_client_callout4 ()
#13 0x0000000100421b3a in _dispatch_mach_msg_invoke ()
#14 0x000000010040bb40 in _dispatch_lane_serial_drain ()
#15 0x0000000100422eda in _dispatch_mach_invoke ()
#16 0x000000010040bb40 in _dispatch_lane_serial_drain ()
#17 0x000000010040cae8 in _dispatch_lane_invoke ()
#18 0x0000000100419f2e in _dispatch_workloop_worker_thread ()
#19 0x000000010049002c in _pthread_wqthread ()
#20 0x000000010048f157 in start_wqthread ()

nlohmann::的东西是一个JSON库,我认识它,因为我在其他项目中使用过它,但我在这个项目中没有使用它。 FrameworkConfiguration::和CoreAnalytics::,根据Google的说法,是与Apple内部的分析收集垃圾有关,我无法直接控制。 我已经在这台机器的系统偏好设置中,在安全& 隐私面板中关闭了所有的分析,然后重启了机器;这个bug仍然是100%可以重现的。

当这种情况发生时,应用程序中的主线程什么都不做;通常它坐在mach_msg_trap()中。 主线程上的回溯也没有我的代码,而且是典型的macOS回溯,是一个空闲的CFRunLoop。

我试着开启了Xcode提供的各种调试功能--地址消毒器、未定义行为消毒器、malloc涂鸦守卫边缘守卫malloc僵尸对象malloc栈。 这些都没有导致任何与问题相关的输出。 (也就是说,除了malloc东西的初始输出说它已经被启用,诸如此类,没有任何输出)。

我用的是Catalina 10.15.3,Xcode 11.3.1。 我的下一步将是升级这两个;我已经忘记了我已经过时了,但只是轻微的,所以如果这有什么不同,那将是令人惊讶的。

很明显,我系统上的其他应用在我按下按键时不会崩溃,所以一定是我的应用做了什么,触发了这个问题,但我无法想象是什么,我也不知道如何调试。 我想如果升级无济于事的话,我会把我的项目复制一份,然后开始撕掉大块的代码,直到这个bug不再重现,并尝试缩小应用的哪个部分负责。 不过我想先在这里检查一下,看看是否有人看到过这个问题。 谢谢。


补充:我刚刚更新到macOS 10.15.4和Xcode 11.4.1。 这次崩溃没有变化。 是时候开始雕刻了。 如果我弄清楚原因,我会在这里发帖,供其他人遇到这种情况时查找。

macos cocoa crash
1个回答
1
投票

好吧,有点不满意的答案是,这似乎是某种Xcode项目文件损坏的结果。 我从一个在11.4.1中创建的新的Cocoa应用项目开始,逐个添加源文件和资源,边走边测试。 最后我把完整的项目重新创建了,bug也不存在了。 按照Xcode的所有项目升级建议,旧的Xcode项目已经从旧版本结转过来了。 我细细地梳理了两个项目的所有构建设置,但看不到任何可以解释差异的东西。 这是个谜。 但为了后人:如果你看到这个问题,请从头开始重建你的项目。

© www.soinside.com 2019 - 2024. All rights reserved.