@Christoph-Hart I noticed you are updating the JUCE submodule today. At the same time, I am struggling with a plugin that builds fine but straight crashes any host except Pluginval because it uses another thread.
When running Pluginval from the terminal to get a back trace, it seems I don't have enough info or symbols to find the origin of the issue.
So I am trying at this very moment to build Pluginval as debug (don't if it'd help) and I've also seen that it can be directly embedded in Juce projects.
So I wonder if it could be a good addition to have it in order to help us debug an uncooperative plugin?
I went back to the commit where the Juce submodule has been integrated with no luck (I'm not saying it's the cause, but it painful to go back this because of git willing to overwrite and messing with files...)
Here's where it crashes and the backtrace:
* thread #1, name = 'JUCE v8.0.3: Message Thread', queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x000000018c8610b0 libsystem_platform.dylib`__bzero + 32
libsystem_platform.dylib`__bzero:
-> 0x18c8610b0 <+32>: stnp q0, q0, [x0]
0x18c8610b4 <+36>: stnp q0, q0, [x0, #0x20]
0x18c8610b8 <+40>: add x3, x0, #0x40
0x18c8610bc <+44>: and x3, x3, #0xffffffffffffffc0
Target 0: (pluginval) stopped.
(lldb) bt all
* thread #1, name = 'JUCE v8.0.3: Message Thread', queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x000000018c8610b0 libsystem_platform.dylib`__bzero + 32
frame #1: 0x0000000115f56fa0 RustEQ - le bleu`___lldb_unnamed_symbol_17ae98 + 264
frame #2: 0x0000000115f7a490 RustEQ - le bleu`___lldb_unnamed_symbol_19e2fc + 404
frame #3: 0x000000011662c128 RustEQ - le bleu`___lldb_unnamed_symbol_8500f8 + 48
frame #4: 0x00000001164eddbc RustEQ - le bleu`___lldb_unnamed_symbol_710880 + 5436
frame #5: 0x0000000116513f88 RustEQ - le bleu`___lldb_unnamed_symbol_737f1c + 108
frame #6: 0x0000000115eb2bc4 RustEQ - le bleu`___lldb_unnamed_symbol_d6b4c + 120
frame #7: 0x0000000116513bdc RustEQ - le bleu`___lldb_unnamed_symbol_737894 + 840
frame #8: 0x0000000115f80358 RustEQ - le bleu`___lldb_unnamed_symbol_1a38e4 + 2676
frame #9: 0x0000000115f41ac0 RustEQ - le bleu`___lldb_unnamed_symbol_1651d4 + 2284
frame #10: 0x0000000115f41ecc RustEQ - le bleu`___lldb_unnamed_symbol_1651d4 + 3320
frame #11: 0x0000000115f8262c RustEQ - le bleu`___lldb_unnamed_symbol_1a5cd8 + 2388
frame #12: 0x0000000115fb9b78 RustEQ - le bleu`___lldb_unnamed_symbol_1dd97c + 508
frame #13: 0x0000000116257830 RustEQ - le bleu`___lldb_unnamed_symbol_47b794 + 156
frame #14: 0x00000001162561ac RustEQ - le bleu`___lldb_unnamed_symbol_476f58 + 12884
frame #15: 0x0000000116252650 RustEQ - le bleu`___lldb_unnamed_symbol_4751dc + 5236
frame #16: 0x0000000115ddeda4 RustEQ - le bleu`___lldb_unnamed_symbol_2ca8 + 252
frame #17: 0x0000000115df5374 RustEQ - le bleu`___lldb_unnamed_symbol_19314 + 96
frame #18: 0x000000018f4b5a9c AudioToolboxCore`APComponent::newInstance(unsigned int, bool, void (OpaqueAudioComponentInstance*, int) block_pointer) + 2376
frame #19: 0x000000018f60a6a4 AudioToolboxCore`instantiate(OpaqueAudioComponent*, unsigned int, AudioComponentOpeningMode, void (OpaqueAudioComponentInstance*, int) block_pointer) + 372
frame #20: 0x000000018f60b120 AudioToolboxCore`__AudioComponentInstanceNew_block_invoke + 120
frame #21: 0x000000018f41f528 AudioToolboxCore`Synchronously + 132
frame #22: 0x000000018f60af28 AudioToolboxCore`AudioComponentInstanceNew + 240
frame #23: 0x000000010026b6dc pluginval`juce::createAudioUnit(juce::VersionedAudioComponent, std::__1::function<void (ComponentInstanceRecord*, int)>) + 60
frame #24: 0x000000010026b348 pluginval`juce::AudioUnitPluginFormat::createPluginInstance(juce::PluginDescription const&, double, int, std::__1::function<void (std::__1::unique_ptr<juce::AudioPluginInstance, std::__1::default_delete<juce::AudioPluginInstance>>, juce::String const&)>) + 348
frame #25: 0x000000010022f4d4 pluginval`juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&, double, int, juce::String&) + 248
frame #26: 0x000000010026b04c pluginval`juce::AudioUnitPluginFormat::findAllTypesForFile(juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::String const&) + 260
frame #27: 0x000000010026dccc pluginval`juce::KnownPluginList::scanAndAddFile(juce::String const&, bool, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&, juce::AudioPluginFormat&) + 656
frame #28: 0x000000010026e124 pluginval`juce::KnownPluginList::scanAndAddDragAndDroppedFiles(juce::AudioPluginFormatManager&, juce::StringArray const&, juce::OwnedArray<juce::PluginDescription, juce::DummyCriticalSection>&) + 428
frame #29: 0x000000010001a8dc pluginval`std::__1::__function::__func<PluginTests::runTest()::$_0, std::__1::allocator<PluginTests::runTest()::$_0>, void ()>::operator()() + 68
frame #30: 0x000000010020052c pluginval`juce::MessageQueue::runLoopCallback() + 64
frame #31: 0x000000018c914bc0 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
frame #32: 0x000000018c914b54 CoreFoundation`__CFRunLoopDoSource0 + 172
frame #33: 0x000000018c9148c0 CoreFoundation`__CFRunLoopDoSources0 + 232
frame #34: 0x000000018c9134e4 CoreFoundation`__CFRunLoopRun + 820
frame #35: 0x000000018c9e5be0 CoreFoundation`_CFRunLoopRunSpecificWithOptions + 532
frame #36: 0x00000001996e8560 HIToolbox`RunCurrentEventLoopInMode + 320
frame #37: 0x00000001996eb8bc HIToolbox`ReceiveNextEventCommon + 488
frame #38: 0x000000019987513c HIToolbox`_BlockUntilNextEventMatchingListInMode + 48
frame #39: 0x00000001913eb1a4 AppKit`_DPSBlockUntilNextEventMatchingListInMode + 228
frame #40: 0x0000000190d3f084 AppKit`_DPSNextEvent + 576
frame #41: 0x00000001918d469c AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
frame #42: 0x00000001918d43a8 AppKit`-[NSApplication(NSEventRouting) nextEventMatchingMask:untilDate:inMode:dequeue:] + 72
frame #43: 0x0000000190d3213c AppKit`-[NSApplication run] + 368
frame #44: 0x00000001001f1a48 pluginval`juce::JUCEApplicationBase::main() + 192
frame #45: 0x00000001001f1938 pluginval`juce::JUCEApplicationBase::main(int, char const**) + 88
frame #46: 0x000000018c49bda4 dyld`start + 6992
thread #2
frame #0: 0x000000018c8159f0 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #3
frame #0: 0x000000018c8159f0 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #4
frame #0: 0x000000018c8159f0 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #5, name = 'com.apple.NSEventThread'
frame #0: 0x000000018c813c34 libsystem_kernel.dylib`mach_msg2_trap + 8
frame #1: 0x000000018c826574 libsystem_kernel.dylib`mach_msg2_internal + 76
frame #2: 0x000000018c81c9c0 libsystem_kernel.dylib`mach_msg_overwrite + 480
frame #3: 0x000000018c813fc0 libsystem_kernel.dylib`mach_msg + 24
frame #4: 0x000000018c914d68 CoreFoundation`__CFRunLoopServiceMachPort + 160
frame #5: 0x000000018c913654 CoreFoundation`__CFRunLoopRun + 1188
frame #6: 0x000000018c9e5be0 CoreFoundation`_CFRunLoopRunSpecificWithOptions + 532
frame #7: 0x0000000190e60c64 AppKit`_NSEventThread + 184
frame #8: 0x000000018c857c58 libsystem_pthread.dylib`_pthread_start + 136
thread #6
frame #0: 0x000000018c81750c libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x000000018c858128 libsystem_pthread.dylib`_pthread_cond_wait + 980
frame #2: 0x000000018c76d858 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 32
frame #3: 0x00000001000ca768 pluginval`juce::WaitableEvent::wait(double) const + 108
frame #4: 0x000000010001942c pluginval`PluginTests::runTest() + 448
frame #5: 0x00000001000d5cfc pluginval`juce::UnitTestRunner::runTests(juce::Array<juce::UnitTest*, juce::DummyCriticalSection, 0> const&, long long) + 448
frame #6: 0x000000010002a030 pluginval`runTests(PluginTests&, std::__1::function<void (juce::String const&)>) + 640
frame #7: 0x00000001000299c8 pluginval`validate(juce::String const&, PluginTests::Options, std::__1::function<void (juce::String const&)>) + 172
frame #8: 0x00000001000295a8 pluginval`AsyncValidator::run() + 344
frame #9: 0x00000001000293c4 pluginval`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, AsyncValidator::AsyncValidator(juce::String const&, PluginTests::Options, std::__1::function<void (juce::String)>, std::__1::function<void (juce::String, unsigned int)>, std::__1::function<void (juce::String const&)>)::'lambda'()>>(void*) + 52
frame #10: 0x000000018c857c58 libsystem_pthread.dylib`_pthread_start + 136
thread #7, name = 'TimoutThread'
frame #0: 0x000000018c817308 libsystem_kernel.dylib`__semwait_signal + 8
frame #1: 0x000000018c6f3cc0 libsystem_c.dylib`nanosleep + 220
frame #2: 0x00000001000919b8 pluginval`juce::Thread::sleep(int) + 80
frame #3: 0x000000010002adec pluginval`PluginsUnitTestRunner::run() + 100
frame #4: 0x00000001000cb53c pluginval`juce::Thread::threadEntryPoint() + 292
frame #5: 0x0000000100197504 pluginval`juce::Thread::createNativeThread(juce::Thread::Priority)::$_455::__invoke(void*) + 152
frame #6: 0x000000018c857c58 libsystem_pthread.dylib`_pthread_start + 136
thread #8, name = 'Sample Loading Thread'
frame #0: 0x000000018c81750c libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x000000018c858128 libsystem_pthread.dylib`_pthread_cond_wait + 980
frame #2: 0x000000018c76d8f0 libc++.1.dylib`std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
frame #3: 0x0000000116c9785c RustEQ - le bleu`___lldb_unnamed_symbol_ebb7b4 + 168
frame #4: 0x0000000116954cac RustEQ - le bleu`___lldb_unnamed_symbol_b78c78 + 52
frame #5: 0x0000000116caa6c0 RustEQ - le bleu`___lldb_unnamed_symbol_ece5a4 + 284
frame #6: 0x000000018c857c58 libsystem_pthread.dylib`_pthread_start + 136
thread #9, name = 'Javascript Thread'
frame #0: 0x000000018c81750c libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x000000018c858128 libsystem_pthread.dylib`_pthread_cond_wait + 980
frame #2: 0x000000018c76d8f0 libc++.1.dylib`std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
frame #3: 0x0000000116c9785c RustEQ - le bleu`___lldb_unnamed_symbol_ebb7b4 + 168
frame #4: 0x0000000116508c3c RustEQ - le bleu`___lldb_unnamed_symbol_72cc00 + 60
frame #5: 0x0000000116caa6c0 RustEQ - le bleu`___lldb_unnamed_symbol_ece5a4 + 284
frame #6: 0x000000018c857c58 libsystem_pthread.dylib`_pthread_start + 136






(I'll remove my code once I have 2 referees so I don't block anyone else)