2014-04-04 33 views
9

Ho recentemente iniziato a utilizzare MATLAB senza GUI avviando MATLAB con l'opzione -nodesktop ed è notevolmente più veloce.Come eseguire il debug del codice matlab senza gui

Tuttavia al momento non è possibile eseguire il debug di uno script .m in modalità non gui. Devo aprire l'editor matlab predefinito ogni volta che devo eseguire il debug. Qualcuno ha capito un modo per farlo? Grazie in anticipo

Sto usando Ubuntu Linux, nel caso in cui ciò sia d'aiuto.

+1

Nota a margine: 'MATLAB -nodesktop -nojvm' è ancora più veloce! – Vish

+0

-nojvm non mi consente di tracciare grafici. – Anoop

+0

ah vedo. Sì, ha i suoi limiti. Ottimo per eseguire codice veloce e sporco. – Vish

risposta

11

Per impostare i punti di interruzione con la riga di comando, dbstop è lo strumento (più dbclear per cancellare i punti di interruzione e dbstatus per elencarli).

Attualmente ci sono 17 forme diverse a dbstop, che consentono di specificare varie combinazioni di:

  1. L'M-file in cui per fermare
  2. Linea numero
  3. Sub-funzione
  4. Condizionale a un'espressione arbitraria. Ad esempio,

    dbstop in myFun.m at 224 if ~exist('x','var') 
    
  5. In qualsiasi errore di run-time (dbstop if error)
  6. A un errore specifico (e.g dbstop if error myFun.m:barErrorId)
  7. In ogni avviso (dbstop if warning) o avviso specifico è riscontrabile
  8. Se NaN o Inf (dbstop if naninf)

Vedere la documentazione per dbstop per i dettagli e buoni esempi.

anche abituarsi a dbcont (o F5), dbstep (o F10), dbquit (Shift + F5), dbstep (anche dbstep in, dbstep out), dbstack (per vedere dove siete e come siete arrivati). Le scorciatoie da tastiera potrebbero essere diverse da Windows.

Molto meno utilizzati, ma ancora molto utili sono dbup e dbdown, che consentono di modificare il contesto dell'area di lavoro (stack di memoria).

Vedere il riepilogo delle funzioni e un elenco di esempi e procedure su MathWorks page on Debugging.


correlati alle "db" funzioni è checkcode, che controllerà il codice per possibili problemi prima ancora di eseguirlo. Questo è un buon sostituto per le sottolineature rosse che si otterrebbero nell'editor MATLAB.

Una volta che si ottiene un blocco di dbstop ed è la sintassi, non sarà spesso necessario inserire un codice keyboard nel codice, ma è sempre un'opzione.

1

Se è utile, è possibile utilizzare MATLAB -Dgdb. Questo imposta gdb come debugger. Dovrai avere familiarità con gdb, ovviamente.

Una volta fatto, utilizzare lo standard gdb commands per eseguire il debug.

EDIT

Il mio errore. Sopra non funzionerà per M-Files. (Non avere MATLAB per provare le cose è un dolore :)

MATLAB ha un set abbastanza buono di debugging commands che è possibile utilizzare dalla riga di comando. Se inserisci comandi da tastiera nel codice MATLAB, puoi utilizzare i comandi.

+0

Non capisco cosa intendi qui. Usarlo mi consentirà di eseguire il debug di matlab come eseguibile, ma non come script .m. O mi sto perdendo qualcosa qui? – Anoop

+0

Il mio errore. Ho disinstallato MATLAB dal mio sistema qualche tempo fa, quindi non ho potuto convalidare la mia risposta. Lasciami modificare la mia risposta :) – Vish

5

Provare a inserire il comando keyboard nel codice per inserire un punto di interruzione. Quando viene raggiunto il comando keyboard, MATLAB verrà inserito in un prompt interattivo che è possibile utilizzare per ispezionare le variabili. Per esempio:

x = rand(10,10); 
y = rand(10,5); 
z = x * y; 
keyboard; % you can interactively inspect x, y, z here 
z = sort(z); 

Per uscire dalla modalità tastiera, è possibile digitare dbquit per uscire dal programma, o return di continuare l'esecuzione del programma.

Un altro trucco è quello di accendere dbstop if error che ti farà cadere automaticamente in un prompt interattivo ogni volta che il tuo codice si blocca.

+0

Era quello che stavo cercando. Ci sono altri trucchi come abilitare e disabilitare interattivamente un breakpoint? – Anoop

0

È possibile utilizzare il pulsante redattore di debug di MATLAB per eseguire il debug all'interno dell'ambiente MATLAB

Problemi correlati