Zėŋōfōbìå

6 aprile 2009

Remote debug e principio di indeterminazione

Filed under: C#, informatica — Tag:, , — Zeno @ 10:42

Su una macchina, e una soltanto, il nostro codice si scassa inevitabilmente.
L’applicativo funziona ovunque, su tutte le macchine che abbiamo provato. Non va benissimo, è ancora in fase di sviluppo, ma una macchina di un tecnico sembra refrattaria. O meglio, intollerante. L’applicativo parte correttamente, fa quello che deve fare, poi, dopo pochi secondi cade. Pesantemente.

Ma come? E’ codice .net 2.0, su un XP, tutto safe, come fa a scassarsi senza dare errori?

Ho avuto l’accortezza di aggiungere:

AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
Application.ThreadException +=  
    new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

Eppure l’applicativo casca, senza dare spiegazioni soddisfacenti.

Che faccio? Mi connetto con i potenti mezzi di Visual Studio al processo remoto. Seguo le eccellenti istruzioni di remote debugguing e seguo passo passo l’esecuzione dell’applicativo dal debugger, in attesa di osservare il fenomeno.

Ovviamente il fenomeno non appare.

Mi disconnetto, il programma cade. Mi riconnetto, il programma regge, mi disconnetto, cade di nuovo. Tre volte.

« non è possibile conoscere simultaneamente la quantità di moto e la posizione di una particella con certezza »

Annunci

3 commenti »

  1. Per quanto ti è capitato, purtroppo, è la norma: mi è capitato spessissimo di avere codice C/C++ che eseguito da dentro il GDB funzionava senza problemi ed eseguito stand-alone segmentava all’istante.

    Potranno dire che è inelegante, preistorico, osceno, … ma l’unico tipo di debug che sfugge al principio di Heinsenberg è quello che evita i debugger (e le loro librerie, distinte da quelle usate poi in release-mode) e “va di printf()”…

    Ciau!

    Commento di jp — 6 aprile 2009 @ 12:03

  2. Beh, vuoi sapere come è finita?
    Il problema è legato a non so quale errore della libreria .net di gestione della seriale. Esiste un workaround, pubblicato dalla microsoft:
    https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=140018

    In pratica basta mettere nell’application config file:

    <runtime>
    <legacyUnhandledExceptionPolicy enabled=”1″/>
    </runtime>

    Come ho fatto a non pensarci prima?

    Commento di Fabrizio — 7 aprile 2009 @ 9:16

  3. Legacy… LOOOL… :)

    Commento di jp — 7 aprile 2009 @ 21:34


RSS feed for comments on this post. TrackBack URI

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.

%d blogger hanno fatto clic su Mi Piace per questo: