Come organizzare ed etichettare i metodi destinati al debug?

0

Ho una classe System , che usa un sacco di altre classi, per ottenere una complessa elaborazione del segnale.

Nel debug di System , è necessario osservare il segnale di uscita per i pattern. Questo non è ottenibile da un debugger, a causa del numero elevato di campioni che stanno passando.

Tuttavia, se determinate parti di System possono essere isolate e agganciate all'ambiente, anziché System , ciò consentirà di eseguire trasformazioni più semplici sul segnale. Pertanto, diventa più semplice vedere se quelle singole parti stanno funzionando.

Questo è in aggiunta ai test per ogni classe, che comprende System . Una volta integrati, i componenti altrimenti funzionanti potrebbero presentare bug. Inoltre, testare 2 o 3 di quelli concatenati è un altro approccio per capire perché System non sta funzionando correttamente.

Di conseguenza, i metodi sono stati introdotti in System per agganciare vari intersecondi da / verso l'ambiente. Questi metodi non sono necessari per un utente finale della classe, ma non possono essere rimossi.

In che modo questi metodi possono essere organizzati, nominati e mixati in modo che l'interfaccia sia chiara per l'utente finale della classe? Inoltre, pur continuando a fornire il comportamento di debug degli hack?

    
posta Vorac 24.09.2014 - 10:04
fonte

2 risposte

2

La mia prima reazione è che dovresti esaminare la possibilità di usare per es. tracciamento o registrazione degli eventi per osservare il comportamento del sistema anziché avere metodi espliciti nella classe. I framework esistenti spesso ti danno la possibilità di modificare i livelli di output in modo dinamico, vale a dire in fase di esecuzione, con sovraccarico che è accettabile per la maggior parte degli ambienti.

Detto questo, se questo è davvero il modo in cui vuoi andare, forse qualcosa del genere sarebbe un po 'più pulito (pseudo-codice, non C ++):

interface IDebugInfo
{
  int SomeDebugCounter();
}

interface IDebugInfoProvider
{
  IDebugInfo GetDebugInfo();
}

class System
  : IDebugInfoProvider
{
  class SystemDebugInfo : IDebugInfo
  {}

  IDebugInfo GetDebugInfo()
  {
    return new SystemDebugInfo(...);
  }
}
    
risposta data 24.09.2014 - 12:51
fonte
1

Potresti leggere su asserire , che è rilevante solo se NDEBUG non è definito dal preprocessore.

Quindi questo suggerisce di avvolgere il tuo codice di debug specifico con

 #ifndef NDEBUG
    //// debug specific code
 #endif

e potresti compilare il tuo binario di produzione con -DNDEBUG ...

La mia preferenza è semplicemente menzionare per es. dbg in ogni nome (di tipo, di funzione o metodo, di variabile) relativo al debugging ...

    
risposta data 24.09.2014 - 13:44
fonte

Leggi altre domande sui tag