Eccezioni nate in file moc per signal-slot



  • Buonasera,
    da alcune prove fatte riguardo eccezioni sotto WindowsCE il codice autogenerato dalle Qt (in particolare i file moc) sollevano delle eccezioni di cui non comprendo la natura. E' possibile che i file moc, autogenerati da Qt, per la gestione delle signal-slot, generino delle eccezioni sotto WindowsCE?
    Grazie



  • Ciao...
    non credo proprio i file moc sono dei complementi come se fossero scritti da te... aiutando la gestione dei segnali...
    ecco un esempio:

    static const qt_meta_stringdata_OasiMain_t qt_meta_stringdata_OasiMain = {
        {
    QT_MOC_LITERAL(0, 0, 8), // "OasiMain"
    QT_MOC_LITERAL(1, 9, 16), // "request_to_close"
    QT_MOC_LITERAL(2, 26, 0), // ""
    QT_MOC_LITERAL(3, 27, 8), // "appsOpen"
    QT_MOC_LITERAL(4, 36, 4), // "file"
    QT_MOC_LITERAL(5, 41, 4), // "load"
    QT_MOC_LITERAL(6, 46, 1), // "f"
    QT_MOC_LITERAL(7, 48, 9), // "maybeSave"
    QT_MOC_LITERAL(8, 58, 18), // "setCurrentFileName"
    QT_MOC_LITERAL(9, 77, 8), // "fileName"
    QT_MOC_LITERAL(10, 86, 7), // "fileNew"
    

    come vedi sono puro codice di aiuto per failitare il lavoro...
    e i moc sanno cosa si collega con i eventi.. slot

    ma oggi ho letto :
    Other changes

    We removed the unmaintained support for Windows CE, and changed the ClearCase integration to be disabled by default.
    a proposito di Windows CE...
    http://blog.qt.io/blog/2017/09/05/qt-creator-4-4-0-released/



  • @patrik08

    Scusa ma non ho capito bene la natura del tuo messaggio....
    Potresti spiegarti meglio.
    Grazie



  • Quale versione di Qt (e, eventualmente, Qt Creator) stai usando?



  • @VRonin
    Ciao, sto usando Qt 4.6 e credo le eccezioni nascano nel collegamento signal-slot nei file moc... in particolare credo di aver individuato questo punto:

    int SynopticPanel::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
    ....
    ....
    ....
    
    case 15: function15 ((*reinterpret_cast< bool(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
    

    Ho un eccezione di tipo Acess Violation e credo che la causa sia questo pezzo di codice in particolare il puntatore _a.
    Potrebbe essere?
    Grazie



  • Bug in moc sono molto rari ma Qt 4.6 e' una versione antica (e' di 8 anni fa) quindi potrebbero esserci cose risolte nel tempo.

    1. puoi usare almeno Qt 4.8? o anche meglio Qt 5.9?
    2. Puoi postare la stack trace di quando il programma crasha?
    3. Puoi provare il programma su una piattaforma piu' "comune" (Desktop Windows o Linux) e vedere se li' funziona? Vorrei capire se e' un problema del programma o dell'integrazione con WinCE


  • @VRonin

    1. No non posso usare versioni diverse
    2. Ho provato a risalire allo stack trace utilizzando la funzione GetThreadCallStack nel branch dell' __except ma visto che la cattura delle eccezioni "risale" lo stack, non sono riuscito a individuare il punto esatto dove l'eccezione viene lanciata tutto questo sotto WinCE. Conosci un metodo per recuperare lo stack trace completo? Ho provato ad utilizzare la libreria "stacktracer" consigliata su alcuni forum ma non sono riuscito ad integrarla a causa di incompatibilità con le mie librerie.
    3. Il programma gira su Desktop Windows e gira su WinCE e i casi di crash dovute ad eccezioni sono rari (ma ci sono).

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.