I can reliably reproduce it in a vanilla Projucer-generated iOS xCode project. jassert
doesn’t stop the LLDB debugger in the scope where it’s defined, but at a later stage, where scope is impossible to debug.
To repro:
-
Create a JUCE GUI project on iOS. I’m on JUCE 7.0.5 now, but this has been happening for older versions too.
-
Make a button and hook up a callback:
MainComponent::MainComponent()
{
button.onClick = []
{
juce::Thread::launch([]
{
DBG("before");
jassertfalse;
DBG("after");
});
};
addAndMakeVisible(button);
setSize (600, 400);
}
Results:
By the time debugger stops execution, before
and after
have already printed to console.
kill(0, SIGTRAP)
(the underlying signal sent by jassert
on iOS) seems to be handled asynchronously, stopping the debugger at a later time.
Am I missing something here?