Newsgroup: it.comp.lang.delphi
Titolo: Breakpoint da programma

Perdonate la semplicità, ma sto imparando a muovermi in Delphi.
Esiste una istruzione che solo in modalità debug blocchi l'esecuzione del
programma?
Non deve generare una eccezione ma solo comportarsi come un breakpoint
(quindi assert non va bene).
Esiste una istruzione che manda su una finestra di output una stringa di
debug?
Per chi mastica un po' di VB vorrei le equivalenti di debug.assert e
debug.print
Grazie
Ciao
GG

Delphi ha delle direttive di compilazione opzionale.
In pratica, se metti dei $DEFINE in testa al tuo codice,
puoi stabilire se alcune parti di codice devono o meno essere compilate.
Questa č una grossa comoditą.
Esempio:
{$DEFINE MYDEBUG}  in testa al codice
procedure FaiQualcosa;
var
  s: string;
begin
  s := QualcheFunzione;
 
  {$ifdef mydebug}
  ShowMessage(s);
  {$endif}
...
Cioč, se MYDEBUG e definita, il blocco racchiuso in ifdef/endif
viene compilato ed eseguito, altrimenti viene ignorato.
Se poi vuoi fare il tecnologico, puoi avere + livelli usando + define..
Per disattivare una direttiva define, basta "spezzare" la sequenza
{$define.. :
{.$define...
{define...
e cosģ via.
In genere, la direttiva č attiva in fase di test.
Poi, prima del rilascio la si disattiva.
Per maggiori dettagli vedi nell'help: ve ne sono altre.
Bye
AS    
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:28e437ff840a0fcafa...@mygate.mailgate.org...


 Mi sembra strano che Delphi non abbia queste due cose. Possibile?
Infatti esiste.
C' una funzione (outputdebugstring) che invia delle stringhe pchar
ad una applicazione di monitoraggio.
Qui usiamo debugview.exe (
www.sysinternals.com
).


 ad una applicazione di monitoraggio.
Aggiungo che sotto Delphi, c'e' l'Event Log in cui 
queste stringhe vengono scritte.





 queste stringhe vengono scritte.
Azz! Non lo sapevo... :((
Bye&Tnx!
AS


  {$ifdef mydebug}
  DebugBreak();
  {$endif}
GG

  {$endif}
Si', cosi' funziona perfettamente.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
Spostare "Windows" nel cestino ?


 in modalita' debug, come dici tu, o a run-time, come diciamo noi,
esistono i normalissimi breakpoint.
Premi F5 sulla linea del codice dove vuoi inserire il breakpoint, si
colora di rosso. Poi manda in esecuzione.
Puoi 'impreziosire' il breakpoint con delle condizioni, se vuoi.
Cliccaci col destro->proprieta'.
saluti, e buon divertimento con delphi
Lorenzo

 Mi servirebbe qualcosa di un po' più sofisticato del tipo:
Assert e OutputDebugString (v. help).
Se usi il debugger integrato, cos'hanno che non va i breakpoint di D?
sono pienamente condizionabili, una volta creati. Per vedere i msg di
ODS: "To display the event log, select View|Debug Windows|Event Log."
Va be' che VB abitua male, ma guardare i manuali o l'help no, eh? :-P
Saluti
Paolo Arosio

 wrote in message
news:a1m5ke$rgoa1$1...@ID-30644.news.dfncis.de...


> Premi F5 sulla linea del codice dove vuoi inserire il breakpoint, si
colora di rosso.
=()
Grazie.
GG

 direttamente delle API per debuggare...
Dal punto di vista del programmatore non dovrebbe 
interessare che si utilizzi o meno un'API del sistema 
operativo per compiere un debug.  Quello che conta e' 
l'effetto finale e se l'effetto finale e' quello 
corretto, cosi' come con Delphi, non vedo, onestamente, 
che problema ci sia.
Dal punto di vista di un delphino, d'altronde, 
potrebbe apparire ridondante che un IDE metta a 
disposizione qualcosa che gia' il s.o. possiede.
Meno trollismi, per cortesia.


 direttamente delle API per debuggare...
In effetti dubito che VB faccia qualcosa di diverso. In ogni caso non
dovrebbe essere troppo difficile includere un wrapper di
Outputdebugstring in un package che ti venga incluso automaticamente da
Delphi all'avvio.
Considera comunque anche le JCL (JediCodeLibraries)
http://www.delphi-jedi.org/
che contengono molte utili funzioni anche per il debug.
Infine, ignoro l'istruzione Intel che e' il breakpoint, ma non dovrebbe
essere troppo difficile includerla con due righe asm nei sorgenti.
Saluti
Paolo Arosio

 essere troppo difficile includerla con due righe asm nei sorgenti.
Anticamente era l'interrupt 3.


 Meno trollismi, per cortesia.
Perdona l'ignoranza, ma cosa sono i "trollismi"?
Ciao
GG

 che contengono molte utili funzioni anche per il debug.
Ci darò un'occhiata
Ciao
GG

 Perdona l'ignoranza, ma cosa sono i "trollismi"?
Comportamenti da troll.
Non vuol essere offensiva, ma di fronte ai vantaggi
che offre Delphi, rispetto a VB, lamentarsi per il 
fatto che una operazione di debug non sia integrata, 
(anche se parimenti fattibile), e' quasi una 
provocazione.


 provocazione.
Non voglio provocare nessuno.
Abbiate pazienza.
Vi pongo delle domande da inesperto di Delphi.
Vengo da altri ambienti che funzionano in modo diverso e che bene o male ti
costringono a ragionare in una certa maniera.
Se ho scelto Delphi un motivo c'č.
Datemi il tempo di imparare.
Ciao
GG

 Non voglio provocare nessuno.
Hai ragione, ma non ti volevo aggredire, e' solo che la frase 
"VB e' meglio di Delphi", anche se legata a un contesto specifico,
mi fa salire il sangue al cervello... :)


 e debug.print
Debug.Print la vorrei anch'io. Ci sarebbe una system call di Windows 
per stampare messaggi di debug (OutputDebugString()), questi messaggi,
tra gli altri, dovrebbe mostrarli l'Event Log di Delphi (cercalo, è un
po' nascosto tra le opzioni)
Personalmente, una volta usavo OLE, con un server a mostrare e/o 
stampare su file i messaggi di debug, e un numero imprecisato di client 
(anche da remoto) a connettersi e a spedirgli stringhe di debug. Era 
iniziato come un mio piccolo esperimento con OLE e il multithreading (e 
tristemente più di tanto non è progredito)
La cosa migliore è che OLE lo masticano un po' tutti (VB, C++, Delphi 
più o meno nativamente su Windows, Java, C, C++ e Javascript tramite 
l'architettura Uno di Sun e il suo binding per COM, tutti i linguaggi 
disponibili per Windows Script, tutti i linguaggi di .NET tramite il 
binding .NET/COM, e persino linguaggi di scripting "indipendenti" come 
Perl, PHP, Python, eccetera), quindi è un sistema molto versatile. La 
cosa peggiore è che non ce l'ho più :( (ma un giorno lo cercherò di 
riscrivere)

 Ma se sto a runtime, come si dovrebbe comportare?
Windows ti mostra una finestra come quelle degli errori critici e ti 
chiede se vuoi agganciare il debugger al programma o se vuoi ignorare 
il breakpoint (o forse ti chiede se vuoi terminare il programma?). 
Almeno credo :)

 Anticamente era l'interrupt 3.
"Anticamente"! funziona ancora, veh :-) Provare per credere:
asm
 int 3
end;
avviare da dentro Delphi, il debugger si blocca su quella riga