PDA

View Full Version : [Visual C] "Trappare" le finestre di assert


sottovento
06-10-2006, 16:44
Ciao a tutti,
il problema di questa notte e' il seguente: ho un processo MOLTO importante per il controllo dell'impianto.
Questo processo utilizza parecchie librerie, tra cui una dll che e' stata commissionata ad una ditta esterna e che e' stata realizzata in Visual C.
Sono in possesso solo di una parte (!!!) dei codici sorgenti.

Questa libreria ha un baco (individuato nella parte dei sorgenti a me nota) che causa la violazione di una ASSERT circa ogni 5 giorni, ovviamente di notte ed in un'ora compresa fra le 2:00 e le 4:00 del mattino.
Siccome sono il responsabile di questo software a per contratto ho 50 minuti di tempo per far ripartire l'impianto in caso di malfunzionamenti, potete ben capire come questo baco mi dia particolarmente fastidio.

Questa DLL e' evidentemente stata rilasciata dopo una compilazione in modalita' DEBUG. Quindi, quando si verifica questa violazione, si apre una finestra che attende la pressione di uno dei bottoni "Retry", "Abort" e cosi' via.

Teoricamente questo processo non dovrebbe avere alcuna interazione con l'utente (implementa un oggetto CORBA).

Mi piacerebbe riuscire a fare quanto segue: vorrei che questo processo, invece che aprire quella maledetta finestra (oppure la finestra "L'applicazione ha generato...bla bla bla"), andasse in crash e terminasse la sua esecuzione. Ovviamente ho un processo che controlla periodicamente se mancano dei task in esecuzione e, in tal caso, li rilancia. Questo mi permetterebbe di dormire e di risolvere il problema nell'orario canonico di lavoro, consultando i log files.

E' possibile? Riesco a "catturare" quella maledetta finestra e chiudere l'applicazione? Ovviamente non posso ricompilare la libreria, ed anche se lo potessi fare, cambierei semplicemente un asino per una capra: invece che la finestra di violazione dell'ALERT mi troverei una finestra di violazione della memoria o cose del genere.

Grazie a tutti per qualsiasi suggerimento, compreso quello di cambiare mestiere

High Flying
Sottovento

wingman87
06-10-2006, 20:25
Non mi intendo moltissimo di C ma so che esiste la API GetWindow con cui forse puoi riuscire ad intercettarla..

sottovento
07-10-2006, 08:19
Non mi intendo moltissimo di C ma so che esiste la API GetWindow con cui forse puoi riuscire ad intercettarla..

Non me ne intendo moltissimo nemmeno io, di Windows, ma mi sembra un buon punto di partenza.
Ti ringrazio tantissimo e mi informo immediatamente.

High Flying
Sottovento