53 messaggi dal 27 novembre 2001
Salve ragazzi comincio col dire che non ho molta esperienza con le Windows Form.
C'è una applicazione WinForms scritta in vb.net che ha molti problemi di affidabilità, per questo mi è stato chiesto di realizzare un programma esterno al primo che monitorasse l'applicazione in questione, tracciando l'esito(positivo o negativo) ed eventualmente intercettare l'errore che esce fuori da un malfunzionamento.
Ma io non ho proprio idea di come poter intercettare gli eventi di una applicazione scritta in vb.net al di fuori della stessa...ci sono delle librerie apposite? e come si intercettano gli errori che l'applicazione genera?
mi potete guidare?
Grazie
Comincio col dire che secondo me è un'idea assurda, perché bisognerebbe investire sulla stabilità dell'altro programma.

Comunque dipende tutto dall'applicazione in questione. Dubito comunque che abbia dei sistemi di monitoraggio tramite api, servizi, remoting o quant'altro, giusto? quindi ti devi affidare ad eventuali notifiche dell'applicativo. Mostra delle finestre di errore? In questo caso è un po' un problema, perché potresti intercettare la creazione della finestra e agire di conseguenza, ma lo vedo poco affidabile?
Scrive nell'event log, o su un file?

Ciao

Il mio blog
Homepage
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Non so se questo http://www.red-gate.com/products/ANTS_Profiler/ possa fare al caso tuo. Esiste una trial di 14 giorni. L'ho povata direttamente: non va malissimo ma eseguita su un programma che impegna molto la memoria di sistema questo tool diventa praticamente ingestibile. In ogni caso fare una prova non ti costa nulla (se non dedicarci un po' di tempo).

Ciao.

.:. Marcello Rutter .:.
Mi sa che lui cerca un programma per tenerlo monitorare e reagire di conseguenza. Il profiler servirebbe per ottimizzare tempi e uso di memoria dell'applicativo che dà problemi, ma mi sembra che abbia già scartato questa ipotesi

Ciao

Il mio blog
Homepage
501 messaggi dal 09 giugno 2006
Contributi
Ciao Ricciolo.

In effetti è così ma quando ho usato ANTS ho notato che può essere di supporto per individuare bug (anche se non è la strada maestra) e contemporaneamente poter verificare lo stato del sistema (memoria, stack, ecc.). Tant'è che nella documentazione ufficiale suggeriscono ANTS anche a: "Technical testers also use ANTS Profiler to pin bugs down to a specific line of code". Che poi sia vero e/o facile ... è un altro argomento.

Ciao.

.:. Marcello Rutter .:.
176 messaggi dal 04 giugno 2007
Contributi | Blog
niddu ha scritto:
Salve ragazzi comincio col dire che non ho molta esperienza con le Windows Form.
C'è una applicazione WinForms scritta in vb.net che ha molti problemi di affidabilità, per questo mi è stato chiesto di realizzare un programma esterno al primo che monitorasse l'applicazione in questione, tracciando l'esito(positivo o negativo) ed eventualmente intercettare l'errore che esce fuori da un malfunzionamento.
Ma io non ho proprio idea di come poter intercettare gli eventi di una applicazione scritta in vb.net al di fuori della stessa...ci sono delle librerie apposite? e come si intercettano gli errori che l'applicazione genera?
mi potete guidare?
Grazie


Ci sono infinite soluzioni a questo problema - dipende cosa devi monitorare.
hai un'idea di che tipo di problema devi aspettarti?
Se non hai idea di dove cominciare, fai girare l'applicazione attaccata ad un debugger (suggerirei WinDbg) in questo modo, se l'applicazione crasha per un'eccezione non gestita, il debugger ti va in break sull'istruzione che ha generato il problema.

Un'alternativa piu' sofisticata a questa e' di fare girare l'appliazione con un debugger attacato e con gli MDA attivati (cerca su Live Search come fare - c'e' da settare qualche registry key). Questo ti consente di trovare problemi piu' interessanti, come heap corruptions o problemi di signature mismatch con P/Invoke finite male. Questo tipo di bug sono pericolosi, perche' il crash avviene in modo non deterministico quando la memoria corrotta e' riutilizzata, e questo puo' succedere anche ore dopo che la corruzione e' avvenuta. Con gli MDA l'applicazione e' interrotta nel debugger nonappena la potenziale corruzione avviene.

La terza e ultima soluzione e' di scriverti una host application specifica per catturare il tipo di problema che cerchi.
Un esempio di questo e' lo host che Joe Duffy ha scritto per trovare deadlocks in un'applicazione scritta in .NET. In questo caso, l'applicazione host tiene una contabilita' di tutti i lock e solleva un'eccezione nel caso sia individuato un deadlock a runtime invece di mandare l'applicazione in hang.
Dovresti trovare il programma completo di source come allegato ad un articolo su MSDN magazine nel 2005 (credo che fosse la rubrica CLR Inside Out)

Queste sono tutte tecniche che usiamo spesso per trovare i problemi nello stress testing delle applicazioni in MS.

Saluti

--Alessandro

Buona fortuna
53 messaggi dal 27 novembre 2001
AlessC-MSFT ha scritto:
niddu ha scritto:

Ci sono infinite soluzioni a questo problema - dipende cosa devi monitorare.
hai un'idea di che tipo di problema devi aspettarti?
Se non hai idea di dove cominciare, fai girare l'applicazione attaccata ad un debugger (suggerirei WinDbg) in questo modo, se l'applicazione crasha per un'eccezione non gestita, il debugger ti va in break sull'istruzione che ha generato il problema.

Un'alternativa piu' sofisticata a questa e' di fare girare l'appliazione con un debugger attacato e con gli MDA attivati (cerca su Live Search come fare - c'e' da settare qualche registry key). Questo ti consente di trovare problemi piu' interessanti, come heap corruptions o problemi di signature mismatch con P/Invoke finite male. Questo tipo di bug sono pericolosi, perche' il crash avviene in modo non deterministico quando la memoria corrotta e' riutilizzata, e questo puo' succedere anche ore dopo che la corruzione e' avvenuta. Con gli MDA l'applicazione e' interrotta nel debugger nonappena la potenziale corruzione avviene.

La terza e ultima soluzione e' di scriverti una host application specifica per catturare il tipo di problema che cerchi.
Un esempio di questo e' lo host che Joe Duffy ha scritto per trovare deadlocks in un'applicazione scritta in .NET. In questo caso, l'applicazione host tiene una contabilita' di tutti i lock e solleva un'eccezione nel caso sia individuato un deadlock a runtime invece di mandare l'applicazione in hang.
Dovresti trovare il programma completo di source come allegato ad un articolo su MSDN magazine nel 2005 (credo che fosse la rubrica CLR Inside Out)

Queste sono tutte tecniche che usiamo spesso per trovare i problemi nello stress testing delle applicazioni in MS.

Saluti

--Alessandro

Buona fortuna

Intanto grazie delle risposte.
Anche io sono dell'idea che per monitorare un applicazione sia ideale farlo dall'interno, ma mi è stato chiesto di non toccare il codice di questa applicazione(motivazioni aziendali che non conosco) e di creare un'altra applicazione esterna alla prima che si occupi di monitorare semplicemente se la procedura va a buon fine o se si verificano delle eccezioni, nel qual caso scrivere su un file di log il dettaglio dell'errore.
Ho cominciato a lavorare con i processi di diagnostica, ho lanciato l'applicazione in questione dentro al mio processo e attendo una risposta; il problema è che sia nel caso che vada a buon fine, sia nel caso generi un eccezione l'applicazione di monitoraggio deve aspettare un input da parte dell'utente. vi allego il codice:

Dim Prc As New System.Diagnostics.Process
Dim ProcessStartInfo As New ProcessStartInfo
Prc.StartInfo.UseShellExecute = False
Prc.StartInfo.RedirectStandardError = True
Prc.StartInfo.RedirectStandardInput = True
Prc.StartInfo.RedirectStandardOutput = True
Prc.StartInfo.FileName = "Processo.exe"
Prc.Start()
Prc.WaitForExit()
If Prc.ExitCode <> 0 Then
Dim stdErr As StreamReader = Prc.StandardError
Scrivo l'errore
Else
Dim stdErr As StreamReader = Prc.StandardOutput
Scrivo l'errore
End If

C'è un modo per forzare la chiusura della prima applicazione quando genera un errore senza che l'utente debba dare l'input? oppure esiste una soluzione analoga seguendo un'altra strada?
Grazie
Modificato da niddu il 20 febbraio 2008 12.39 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.