<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pluginval as submodule, worth it?]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/1">@Christoph-Hart</a> 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.<br />
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.</p>
<p dir="auto">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.<br />
So I wonder if it could be a good addition to have it in order to help us debug an uncooperative plugin?</p>
<p dir="auto">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...)</p>
<p dir="auto">Here's where it crashes and the backtrace:</p>
<pre><code>* 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:
-&gt;  0x18c8610b0 &lt;+32&gt;: stnp   q0, q0, [x0]
    0x18c8610b4 &lt;+36&gt;: stnp   q0, q0, [x0, #0x20]
    0x18c8610b8 &lt;+40&gt;: add    x3, x0, #0x40
    0x18c8610bc &lt;+44&gt;: and    x3, x3, #0xffffffffffffffc0
Target 0: (pluginval) stopped.
</code></pre>
<blockquote>
<p dir="auto">(lldb) bt all</p>
</blockquote>
<pre><code>* 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&lt;void (ComponentInstanceRecord*, int)&gt;) + 60
    frame #24: 0x000000010026b348 pluginval`juce::AudioUnitPluginFormat::createPluginInstance(juce::PluginDescription const&amp;, double, int, std::__1::function&lt;void (std::__1::unique_ptr&lt;juce::AudioPluginInstance, std::__1::default_delete&lt;juce::AudioPluginInstance&gt;&gt;, juce::String const&amp;)&gt;) + 348
    frame #25: 0x000000010022f4d4 pluginval`juce::AudioPluginFormat::createInstanceFromDescription(juce::PluginDescription const&amp;, double, int, juce::String&amp;) + 248
    frame #26: 0x000000010026b04c pluginval`juce::AudioUnitPluginFormat::findAllTypesForFile(juce::OwnedArray&lt;juce::PluginDescription, juce::DummyCriticalSection&gt;&amp;, juce::String const&amp;) + 260
    frame #27: 0x000000010026dccc pluginval`juce::KnownPluginList::scanAndAddFile(juce::String const&amp;, bool, juce::OwnedArray&lt;juce::PluginDescription, juce::DummyCriticalSection&gt;&amp;, juce::AudioPluginFormat&amp;) + 656
    frame #28: 0x000000010026e124 pluginval`juce::KnownPluginList::scanAndAddDragAndDroppedFiles(juce::AudioPluginFormatManager&amp;, juce::StringArray const&amp;, juce::OwnedArray&lt;juce::PluginDescription, juce::DummyCriticalSection&gt;&amp;) + 428
    frame #29: 0x000000010001a8dc pluginval`std::__1::__function::__func&lt;PluginTests::runTest()::$_0, std::__1::allocator&lt;PluginTests::runTest()::$_0&gt;, void ()&gt;::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&lt;std::__1::mutex&gt;&amp;) + 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&lt;juce::UnitTest*, juce::DummyCriticalSection, 0&gt; const&amp;, long long) + 448
    frame #6: 0x000000010002a030 pluginval`runTests(PluginTests&amp;, std::__1::function&lt;void (juce::String const&amp;)&gt;) + 640
    frame #7: 0x00000001000299c8 pluginval`validate(juce::String const&amp;, PluginTests::Options, std::__1::function&lt;void (juce::String const&amp;)&gt;) + 172
    frame #8: 0x00000001000295a8 pluginval`AsyncValidator::run() + 344
    frame #9: 0x00000001000293c4 pluginval`void* std::__1::__thread_proxy[abi:v160006]&lt;std::__1::tuple&lt;std::__1::unique_ptr&lt;std::__1::__thread_struct, std::__1::default_delete&lt;std::__1::__thread_struct&gt;&gt;, AsyncValidator::AsyncValidator(juce::String const&amp;, PluginTests::Options, std::__1::function&lt;void (juce::String)&gt;, std::__1::function&lt;void (juce::String, unsigned int)&gt;, std::__1::function&lt;void (juce::String const&amp;)&gt;)::'lambda'()&gt;&gt;(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&lt;std::__1::mutex&gt;&amp;, std::__1::chrono::time_point&lt;std::__1::chrono::system_clock, std::__1::chrono::duration&lt;long long, std::__1::ratio&lt;1l, 1000000000l&gt;&gt;&gt;) + 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&lt;std::__1::mutex&gt;&amp;, std::__1::chrono::time_point&lt;std::__1::chrono::system_clock, std::__1::chrono::duration&lt;long long, std::__1::ratio&lt;1l, 1000000000l&gt;&gt;&gt;) + 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
</code></pre>
]]></description><link>https://forum.hise.audio/topic/14644/pluginval-as-submodule-worth-it</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 01:42:25 GMT</lastBuildDate><atom:link href="https://forum.hise.audio/topic/14644.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Apr 2026 21:55:26 GMT</pubDate><ttl>60</ttl></channel></rss>