Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: [c++ MFC]eccezioni

  1. #11
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Più che altro ho postato il link dove c'è scritto quanto ho riportato.

  2. #12
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    e per far si che qualsiasi tipo di eccezione venga gestita come posso fare?
    grazie

  3. #13
    try {
    //provoca eccezioni varie;
    } catch(std::exception& e) {
    //eccezioni C++ standard;
    } catch(unsigned long u) {
    //eccezioni Win32;
    }
    Armageddon - Chief Developer

    Stiamo cercando collaboratori!

  4. #14
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Grazie.
    Il mio problema è che vorrei intercettare anche quando si va a scrivere tramite un puntatore ad es su un area di memoria che non deve essere toccata e il programma va in crash.
    E possibile in questo modo avere un indicazione di dove nel mio codice è avvenuto questo errore?
    Grazie.

  5. #15
    quando vai a scrivere su una zona di memoria protetta provochi una EXCEPTION_ACCESS_VIOLATION (codice 5)

    come tutte le eccezioni, questa risale la stack fino a che trova un blocco di codice che la cattura (Structured Exception Handler oppure C++ Handler che cattura unsigned long)

    se usi SEH (quindi __try { } __except() {} ) puoi recuperare indicazioni sull'indirizzo di memoria non valido tra le informazioni accessiorie dell'eccezione
    GetExceptionInformation()->ExceptionRecord->ExceptionInformation è un array con due dati, uno è il puntatore e l'altro una flag che rappresenta l'accesso desiderato alla memoria (read e write + execute in alcuni processori)

    se usi le eccezioni C++ l'unico dato che ti viene presentato è che è avvenuta un'eccezione di accesso violato, ma non sai né dove né come

    in ogni caso l'unico modo per scoprire il punto del codice che provoca l'eccezione è usare un debugger
    Armageddon - Chief Developer

    Stiamo cercando collaboratori!

  6. #16
    Se richiami la API GetExceptionInformation ravanando nella struttura che ti viene restituita puoi ottenere l'EIP (il registro che contiene l'instruction pointer), ma te ne fai poco e soprattutto ricorda che le eccezioni hardware non andrebbero mai intercettate (tranne eventualmente quelle di divisione per zero e poche altre); per ulteriori informazioni leggi qui e qui. Se proprio hai bisogno di "catturare" una divisione per zero e poche altre eccezioni SEH ti conviene usare una funzione-traduttore che le trasforma in eccezioni C++ (leggi qui).
    Se invece ti serve catturare tutte le eccezioni per avere un crash report, dai un'occhiata qui.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.