Domanda

Ho testato il profiler di prestazioni e memoria AQTime per vedere se vale la pena spendendo quei grandi $$$ per questo per la mia applicazione Delphi.

Ciò che mi stupisce è come può fornirti la traccia delle prestazioni a livello di linea sorgente (che include il numero di volte in cui ogni linea è stata eseguita e il tempo impiegato da quella linea) senza modificare il codice sorgente dell'applicazione e senza aggiungere una quantità eccessiva di tempo di esecuzione del debug.

Il modo in cui lo fanno in modo così efficiente mi fa pensare che potrebbero esserci alcune tecniche / tecnologie utilizzate qui che non conosco e che sarebbe utile conoscere.

Sai che tipo di metodi usano per catturare l'esecuzione riga per riga senza modifiche al codice?

Esistono altri strumenti di profilazione che eseguono anche controlli non invasivi riga per riga e, in tal caso, usano le stesse tecniche?

È stato utile?

Soluzione

Questa è solo una speculazione, ma forse AQtime si basa su una tecnologia simile a Microsoft Detours ?

  

Detours è una libreria per strumenti   funzioni Win32 arbitrarie su x86, x64,   e macchine IA64. Deviazioni intercettazioni   Win32 funziona riscrivendo il file   codice in memoria per funzioni target.

Altri suggerimenti

Ho creato un profiler open source per Delphi che fa lo stesso: http://code.google.com/p/asmprofiler/

Non è perfetto, ma è gratuito :-). Utilizza anche la tecnica Deviazione. Memorizza ogni chiamata (è necessario impostare manualmente quali funzioni si desidera profilare), in modo che possa creare un albero cronologico delle chiamate esatto, incluso un diagramma temporale (!).

Non conosco Delphi in particolare, ma un debugger dell'applicazione C può eseguire il profiling riga per riga in modo relativamente semplice: può caricare il codice e associare ogni percorso di codice a un blocco di codice. Quindi può interrompere tutte le istruzioni di salto condizionale e solo guardare e vedere quale percorso di codice viene preso. I debugger come gdb possono funzionare in modo relativamente efficiente perché funzionano attraverso il kernel e non modificano il codice, ma vengono semplicemente informati quando viene eseguita ogni riga. Se qualcosa provoca l'uscita anticipata del blocco (longjmp), il debugger può agganciarlo e capire fino a che punto è arrivato ai blocchi quando è accaduto e incrementare solo quelle linee.

Certo, sarebbe ancora difficile codificare, ma quando dico facilmente intendo che potresti farlo senza perdere tempo a perdere ogni istruzione per aggiornare un contatore.

Anche il TurboPower ormai defunto aveva un ottimo strumento di profilazione / analisi per Delphi chiamato Sleuth QA Suite. L'ho trovato molto più semplice di AQTime, ma anche molto più facile ottenere risultati significativi. Potrebbe valere la pena provare a rintracciare - eBay, forse?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top