Short Pause doesn't come back
Ältere Kommentare anzeigen
Using App Designer I was running my program with no breakpoints set.
Suddenly it stopped running in a place it shouldn't so I broke out to see what's going on and found this:

My understanding is that the open arrow signifies a place where the code has called a routine and not come back yet.
So what's wrong with this pause this time, after it ran fine 9 times in the last 10 seconds or so?
6 Kommentare
Swastik Sarkar
am 15 Okt. 2024
Could the app implementation be attached here to enable more effective assistance from the community?
Gavin
am 15 Okt. 2024
colordepth
am 22 Okt. 2024
Bearbeitet: colordepth
am 22 Okt. 2024
I suspect that while your app is running, MATLAB might be handing control over to another part of your code that never returns, possibly due to some asynchronous logic or hardware communication. To illustrate such a deferment, I created a simple app (see attachment) with two buttons:

The callback functions for these buttons are set to pause for 2 seconds and 5 seconds, respectively:

Let's examine what happens when I press them quickly one after the other:

Notice how the "pause(2)" function ends up running for 5 seconds; this indicates that the execution of the first button's callback was deferred until after the second button's click event finished. The "Interruptible" property can control this behaviour in my provided example app: https://www.mathworks.com/help/matlab/creating_guis/interrupt-callback-execution.html
I don't think "pause" is necessarily the issue here; it might just be the slowest instruction in your loop, making it more probable to observe it being affected by such deferment.
Is there a similar situation in your application where a separate logic might start executing during the loop in your code?
Rik
am 23 Okt. 2024
Using drawnow to force a refresh might solve this, but I can't currently test this assertion.
Gavin
am 24 Okt. 2024
Gavin
am 27 Jan. 2025
Antworten (1)
Dirk Engel
am 27 Jan. 2025
0 Stimmen
The white/hollow arrow indicates that the line is currently executing, but that the workspace is currently unloaded. Consider the following case where the debugger stopped at the break point. The workspace of function print() is currently loaded, but the workspaces of functions button_Callback() and createButton(), which are up the call stack, are currently unloaded.

So, you have access to the local variable "text", but not to the variables "obj", "s", "e". If you step up the callstack, e.g. using dbup, the workspace of button_Callback() gets loaded and the worspace of function print() gets unloaded.

Now you have access to the local variables "obj", "s" and "e", but not to "text".
Note that, as a side effect, the pause() function executes pending callbacks. There probably was a callback function executing down the call stack which was stuck for whatever reason. Assumingly, that function was a builtin function, in which case the debugger jumps to the first non-builtin function up the call stack instead. And since the workspace of another function down the call stack was loaded, you got the white arrow. Next time, take a look a the workspace editor. It may provide some clues.
Kategorien
Mehr zu Graphics Performance finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!