Tecniche di debug in tempo reale


18

Non c'è niente come la routine di modificare una variabile, compilare il codice che richiede alcuni minuti, eseguire il codice, rendersi conto che il tuo tweak era nella direzione sbagliata e ripetere di nuovo il processo.

Vorrei iniziare a interagire con la mia logica di gioco mentre è in corso una sessione. Quali sono alcuni dei modi in cui hai gestito questo?

Sarei aperto a sentire soluzioni per iOS, C / C ++ e C # / XNA.

Risposte:



4

L'integrazione di un linguaggio completamente interpretato può consentire di riscrivere elementi di gioco molto, molto facilmente al volo.

Python, Lua, ecc. Possono essere utilizzati espressamente per questo. Probabilmente Angel Engine può servire da esempio.

Il caricamento a caldo è un altro elemento da verificare (in sostanza, un evento viene attivato per dirti che una risorsa è cambiata - un file di configurazione, un elemento artistico, ecc. - e lo esegui attraverso una serie di condizionatori che lo modificano per il formato finale prima di sostituire quello esistente con il nuovo.

Ho lavorato con un motore di prototipazione rapida che utilizzava il caricamento a caldo ed è stato un piacere.


2

Per quanto riguarda C ++, C # e C # con XNA, Visual Studio offre eccellenti strumenti di debug: mette in pausa l'applicazione in tempo reale in qualsiasi punto del codice, visualizza i valori assegnati alle variabili in qualsiasi momento, passa attraverso le chiamate di funzione , analizzare lo stack di chiamate e altro ancora. Inoltre, strumenti come Pix e CLR Profiler rendono grande lo sviluppo con i linguaggi basati su DirectX (Pix) e CLR (CLR Profiler).

Inoltre, una parte particolarmente utile del lavoro con i giochi è che abbiamo quest'area gigantesca in cui scrivere testo di debug, grafica, ecc. I grafici in tempo reale sull'utilizzo della memoria, il numero di oggetti / vertici disegnati, il framerate, ecc. Sono elementi comuni da disegnare sullo schermo.


1
Mentre VS è uno strumento di sviluppo eccezionale, il normale debug richiede tempo: ricerca dei punti di interruzione, controllo del codice, modifica delle variabili, riavvio del flusso. Questa domanda è alla ricerca di un modo immediato per fare cose come spostare un componente di interfaccia o modificare il rapporto di attacco di un boss, ecc.
David McGraw,

2

In C / C ++ un semplice trucco è mettere il tuo tweakable in una variabile statica, innescare un breakpoint, cambiare lo statico nel debugger e rimane persistente fino all'uscita.


Renderlo una variabile statica all'interno di una funzione però. Se si tratta di un Visual Studio statico globale potrebbe non essere in grado di mostrare il suo valore.
Kaj,

2

La registrazione HTTP è di grande aiuto e non è difficile da avviare. Puoi persino utilizzare il motore delle app di Google come un modo rapido per farlo funzionare. I dati sono sempre utili.

Script e XML possono essere ricaricati al volo e non richiedono alcun ripristino. Consentire loro di fallire senza far cadere il gioco. Questo dà molto potere ad artisti, tester e designer.

Menu di debug in-game Un semplice menu di debug nel gioco che puoi generare da bambino e bloccare il gioco sia con i cursori del motore che con quelli del gioco. Consentendo di modificare i numeri chiave in fase di esecuzione e magari eseguire una o due funzioni di debug o dump di informazioni.

Adoro anche le prese ASYNC come menzionato nella risposta di David

Facile da usare Il tuo team di gioco deve essere in grado di aggiungere a questi strumenti e usarli molto facilmente, o semplicemente non si abitueranno.


2

So che Sean James l'ha già detto . Ma seriamente, Visual Studio (in particolare gli strumenti di debug) è fantastico per questo.

Non uso molto C ++ in questi giorni, quindi non sono sicuro di quanto bene si applichino lì. Ma per C # (incluso in C # Express) hai:

E questo potrebbe farti impazzire (è scoppiato nel mio quando l'ho scoperto):

La finestra immediata è in realtà un po 'difficile da trovare (è nel menu Debug / Windows).

L'unico aspetto negativo principale dell'utilizzo del debugger di Visual C # è che non gli piace cambiare i constvalori. Quindi di solito applico i miei valori relativi al gameplay staticmentre li sto modificando.

(Inoltre: avere due monitor aiuta molto.)


Ora devo ammettere che il metodo sopra descritto comporta la sospensione dell'applicazione, che può essere insoddisfacentemente lenta per alcune cose particolarmente difficili.

In queste rare occasioni, ciò che faccio (in XNA) è semplicemente hackerare un po 'di codice (probabilmente usando Modifica e Continua, come sopra) per afferrare Keyboard.GetState().IsKeyDown()(in realtà ho un wrapper più facile da digitare per questo) e regolare il valore tramite i tasti. Qualcosa di più complicato non vale la pena.


In pratica, ciò che di solito trovo molto più importante è poter visualizzare (piuttosto che modificare) i valori in tempo reale. Per questo ho una bella piccola classe che può bufferizzare linee e testo da disegnare alla fine del frame. È anche utile per la prototipazione rapida.

(E, ancora una volta, è bello poter "modificare e continuare" queste visualizzazioni in fase di esecuzione.)


(fonte: andrewrussell.net )
( da qui )

Temo di non avere una "bella" fonte da pubblicare al momento (forse più tardi). Ma è fondamentalmente solo un elenco di linee (per questa libreria di linee rotonde ) e stringhe (per SpriteBatch incorporato di XNA). Basta farlo da public staticqualche parte, e disegnare tutto con una trasformazione appropriata in modo che tutto appaia nello "spazio mondiale" (e quindi cancellare gli elenchi per il fotogramma successivo).


1

Scrivere un semplice sistema di riflessione per C / C ++ è abbastanza banale. In questo modo puoi sfogliare tutte le variabili del gioco (che si tratti di uno strumento di rete, una tastiera o un joypad) e modificarle in base al tuo cuore. Funziona per me, ma tutte le risposte sopra sono ugualmente valide.

Modificato per aggiungere: questo thread ora riguarda l'ottimizzazione, non il debug secondo il titolo del thread.


0

Una soluzione che ho visto in più studi è un'app di debug esterna che si collega al tuo programma tramite la rete. Questa app mostra specifiche variabili esposte e ti consente di modificarle in tempo reale. L'aggiunta di nuove variabili è una questione di aggiunta di alcune macro al codice di gioco.

L'impostazione iniziale delle macro lato gioco, il protocollo server / client (le soluzioni che ho visto serializzare xml avanti e indietro) e scrivere il client, è grande. Tuttavia è estremamente utile, soprattutto perché l'utilizzo della rete per la comunicazione significa che puoi lavorare su qualsiasi piattaforma.


0

Associare il caricamento e la lettura della variabile in un file di testo e avviarlo utilizzando uno specifico keybinding o comando dalla console.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.