ExceptionAddress non presente nel file MAP

di il
7 risposte

ExceptionAddress non presente nel file MAP

Ciao a tutti,
Sono nuovo del forum e spero di scrivere nella sezione giusta.
Sto avendo problemi nell'identificazione di un' eccezione che avviene su un'applicazione in C++ che gira su sistema operativo Wince 6.0. Seguendo le linee guida dell'articolo http://www.codeproject.com/Articles/43064/How-to-Debug-the-Exception l'indirizzo dell'eccezione può essere indentificato aprendo il file MAP e osservando gli indirizzi alla colonna Rva+Base. In realtà, l'indirizzo dell'eccezione che acquisisco tramite la funzione GetExceptionInformation() è molto più grande (0x400....) di quelli contenuti nel file MAP.
Qualcuno ha avuto un problema simile?

Grazie

Wishmaster84

7 Risposte

  • Re: ExceptionAddress non presente nel file MAP

    Gli indirizzi nell'elenco dovrebbero essere offset rispetto all'indirizzo di base in cui viene caricato l'eseguibile, che dovrebbe essere 0x40000000

    Togli questo valore da quello indicato nell'eccezione e dai un'occhiata alla lista.
  • Re: ExceptionAddress non presente nel file MAP

    Grazie.
    Indagando meglio ho scoperto che l'eccezione è relativa alla dll di sistema coredll.dll, che sul sistema è caricata all'indirizzo 0x400....
    Pertanto ho seguito la stessa procedura vedendo il map di coredll.dll. Sembra che l'eccezione sia avvenuta durante la chiamata della funzione
    CxxThrowException.

    0001:000305e0 __CxxThrowException@8 100315e0 f coredll_ALL:throw.obj

    Potrebbe essere un'eccezione del tipo EXCEPTION_STACK_OVERFLOW, EXCEPTION_GUARD_PAGE o EXCEPTION_INVALID_HANDLE?

    Grazie
  • Re: ExceptionAddress non presente nel file MAP

    Mi sa che purtroppo __CxxThrowException è una routine che "solleva" l'eccezione e quindi da questo punto di vista non hai purtroppo scoperto ancora niente relativamente al tuo problema.
    Ma non ti è possibile debuggare l'applicazione? O anche solo salvare su file di testo i punti per cui passa il tuo software in modo da individuare il punto in cui avviene l'eccezione?
  • Re: ExceptionAddress non presente nel file MAP

    Purtroppo no,
    E' un problema avvenuto "sul campo" ed ho a disposizione solo un log con l'indirizzo relativo all'eccezione. Il log in realtà dovrebbe stampare una stringa con il tipo di eccezione (ad es. EXCEPTION_ACCESS_VIOLATION). Ho notato però che nella funzione che trasforma il codice numerico in stringa non sono stati codificati i codici EXCEPTION_STACK_OVERFLOW, EXCEPTION_GUARD_PAGE o EXCEPTION_INVALID_HANDLE. Pertanto immagino sia una di queste eccezioni e sto cercando di riprodurre il problema.
    Grazie per l'indicazione!
  • Re: ExceptionAddress non presente nel file MAP

    Hai provato a far verificare nel registro eventi? Potresti trovare il codice numerico dell'eccezione
  • Re: ExceptionAddress non presente nel file MAP

    Buongiorno,
    Purtroppo su Wince non ho un registro eventi.
  • Re: ExceptionAddress non presente nel file MAP

    Se hai a che fare con una eccezione EXCEPTION_STACK_OVERFLOW potrebbe essere a causa di codice presente in un evento che chiama sé stesso (anche tramite un altro evento). Controlla che questa evenienza non si verifichi magari analizzando il codice che sta nei vari eventi e disabilitandone uno per volta.
Devi accedere o registrarti per scrivere nel forum
7 risposte