Calling dbquit('all') from the UI thread

5 visualizaciones (últimos 30 días)
MaxK
MaxK el 27 de Abr. de 2016
Comentada: Adam Danz el 2 de Dic. de 2020
Hi,
I have a question regarding a dbquit call from the UI thread. We are doing the following: We launch a gui where some parameters can be entered and then the calculation can be started by pressing a start button. Further there is an abort button which when pressed stops the calculation. Now the problem is when we debug our calculation. Let's say we have hit a break point in the calculation. In the abort callback function we call: dbquit('all');
The versions R2014a and before worked as expected, i.e. it quitted the debug mode. Since R2014b and still in R2016b Matlab prints the following error message:
Error using dbquit Debug commands only allowed when stopped in debug mode.
Error in gui>button_abort_call (line 389) dbquit('all');
Error while evaluating UIControl Callback
And the debug session is still running. Is there a possibility to stop all debug sessions from the UI thread in Matlab R2016a?
Thank you very much.
Max
  1 comentario
KAE
KAE el 13 de Jun. de 2017
Editada: KAE el 20 de Jun. de 2017
Matlab should have a video tutorial on debugging GUIs with this and other tips such as these. If you are new to GUIs you are debugging a lot, yet you don't know how to do it. Also note Yair Altman's description of a debugging bug in in GUIs here (search for 1-MH5KVI).

Iniciar sesión para comentar.

Respuestas (3)

Brian Emery
Brian Emery el 25 de Ag. de 2016
I had the same problem. It appears that R2016 does not allow the use of dbquit from within a function or script. This behavior breaks my shortcut function for clearing all variables, closing files and quitting the debugger.
The workaround is to simulate keyboard input of the dbquit shortcut 'shift+f5' using the java robot class. A bit ridiculous (!) but here it is (using code found on matlabcentral):
% Initialize the java engine
import java.awt.*;
import java.awt.event.*;
%Create a Robot-object to do the key-pressing
rob=Robot;
%Commands for pressing keys:
% shift + f5 :
rob.keyPress(KeyEvent.VK_SHIFT)
rob.keyPress(KeyEvent.VK_F5)
rob.keyRelease(KeyEvent.VK_SHIFT)
rob.keyRelease(KeyEvent.VK_F5)
% end
Here are links for reference:
https://www.mathworks.com/matlabcentral/answers/527-artificial-simulated-key-press
https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html
Hope someone finds a better solution!
  2 comentarios
KAE
KAE el 16 de Jun. de 2017
Another workaround, since some time has gone by, is to use a later Matlab version. I have this problem in R2015b but not in R2017a.
Adam Danz
Adam Danz el 2 de Dic. de 2020
In r2020b debug commands are only allowed when stopped in debug mode. Calling dbquit within a script or function will result in an error.

Iniciar sesión para comentar.


MaxK
MaxK el 23 de Sept. de 2016
Thank you. It's working great.

Nicholas
Nicholas el 18 de Ag. de 2019
Thank you!!!
I'm running Matlab 2017a. For me, it never worked the first time I called it in Matlab. It worked every time after the first time. I worked around that by doing the following:
Firstly, I put the following lines of code in my startup.m file:
import java.awt.Robot;
import java.awt.event.KeyEvent;
rob = Robot; %Create a Robot-object to do the key-pressing
rob.keyPress( KeyEvent.VK_SHIFT );
rob.keyRelease( KeyEvent.VK_SHIFT );
This just presses and depresses shift.
After that, I created the following function
function restart
import java.awt.Robot;
import java.awt.event.KeyEvent;
rob = Robot; %Create a Robot-object to do the key-pressing
rob.keyPress( KeyEvent.VK_SHIFT );
rob.keyPress( KeyEvent.VK_F5 );
rob.keyRelease( KeyEvent.VK_SHIFT );
rob.keyRelease( KeyEvent.VK_F5 );
end
Then, startup runs the code to press and depress shift. After that the restart function works every time.

Categorías

Más información sobre Environment and Settings en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by