Compilazione 64 bit

  1. ‹ Older
  2. 5 days ago

    Nedi F

    Jan 15 Europe (Italy, Bologna)

    Hi Beatrix! I try to answer to your questions:
    a) I can't identify the code where the app crashes.
    b) I don't get any error message: simply "the app stopped working"
    c) I don't have installed any special app to analyze crashes.
    d) The app doesn't always crash at the same place. A place where the app crashes quite often is where I display a listbox
    e) During debugging the app works normally
    f) I don't know what kind of IDE scripts must be updated (I am new about Xojo)

    The 32bit version works fine.
    Thank you!

  3. Beatrix W

    Jan 15 Pre-Release Testers Europe (Germany)

    Okay, when the app doesn't crash on startup then we don't need to check for the IDE scripts.

    Random crashes usually occur when you have timing issues in threads.

    You really need to find out where the crashes occur. And yes, this sucks if you can't use the debugger. There is a magic method called "currentMethodName". In the code you suspect the crash could come from you need to add something like

    Globals.theErrorLog.logitem currentMethodName

    to EVERY method, event etc. at the top and the bottom. "logitem" writes to a log file. Alternatively, you could try to remove suspect code. But this is way easier if you have an idea where the crash could come from. And here is the information about Windows crash dumps: http://developer.xojo.com/techinfo/creating-crash-dumps .

  4. Nedi F

    Jan 15 Europe (Italy, Bologna)

    Hi Beatrix, following your post I got the dump when my app crashes. This dump says that the error is 0xC0000374 (heap damaged). I have no idea about the problem and, of course, about his solution.

  5. Maurizio R

    Jan 15 Pre-Release Testers, Xojo Pro

    Nedi,
    se possibile inizia a inserire istruzioni di print nel codice in modo da poter tracciare quali parti sono eseguite e quali no.
    Dal momento che un punto di blocco frequente sembra essere la visualizzazione di una listbox: da dove ricavi il contenuto da visualizzare nella listbox e come lo aggiungi nella listbox stessa?

    Purtroppo "un errore all'indirizzo 0xC0000374" non e' di nessun aiuto in quanto non e' decifrabile: l'ambiente Xojo non fornisce informazioni adeguate per poter interpretare in modo adeguato l'indirizzo di errore.

    Aggiungi altre informazioni se puoi.
    Saluti.

  6. Nedi F

    Jan 15 Europe (Italy, Bologna)

    Grazie Maurizio della tua risposta. Domani inserirò la scrittura di un file di log nei punti "caldi" in cui il programma va in crash.
    La cosa che mi lascia un po' interdetto è che la versione compilata a 32 bit funziona perfettamente...

    Nedi

  7. Antonio R

    Jan 15 Pre-Release Testers, Xojo Pro Europe (Italy)

    Usi riferimenti esterni (DLL) o altro?
    Potrebbero non essere completamente disponibili a 64bit.
    Non essendo, al momento, disponibile un debugger a 64bit, bisogna fare alla vecchia maniera scrivendo su file tutto il possibile e identificare quindi il vero problema...

  8. 4 days ago

    Nedi F

    Jan 16 Europe (Italy, Bologna)

    Ho inserito nei punti "caldi" del programma la scrittura di un file di log, per capire dove va in crash.
    Eseguo sempre lo stesso passo del programma, e sempre con gli stessi dati: ogni volta va in crash in punti diversi.
    A questo punto continuo a non capirci nulla, per cui rinuncio a compilare per il 64 bit.
    Una domanda: c'è qualche impostazione particolare da fare nell'IDE per il 64 bit?

    Grazie comunque a tutti!

  9. Antonio R

    Jan 16 Pre-Release Testers, Xojo Pro Europe (Italy)

    Hai messo in App.UnhandledException
    in modo da riportare (nel caso) lo stack dell'eccezione.

    così come puoi mettere all'inizio di ogni metodo
    #if logtrace
    writeToLog CurrentMethodName
    #end if
    dove writeToLog è la tua routine per il log dell'avanzamento e logTrace è una costante booleana (in un modulo) che metti a true quando compili per verificare le cose e a false quando non ti servono (release ad esempio)

  10. Nedi F

    Jan 16 Europe (Italy, Bologna)

    Ciao Antonio, ho fatto proprio così: ho inserito in svariati punti la scrittura di un file di log, scrittura condizionata dal valore di una variabile booleana.

    Non so cosa sia e come funzioni App.UnhandledException. Faccio qualche ricerca e poi vedo cosa fare.
    Se tu intanto vuoi spiegarmi significato e uso di questa App.UnhandledException mi faresti una cortesia.

    Grazie!

  11. Antonio R

    Jan 16 Pre-Release Testers, Xojo Pro Europe (Italy)

    Il mio suggerimento della variabile booleana è con #if (magari non lo hai notato oppure è quello che hai fatto)
    Questo permette in fase di compilazione di eliminare il codice non necessario (esattamente come quando fai #if targetWin...)

    UnhandledException è un evento a livello dell'oggetto App, se non hai gestito una eccezione alla fine arrivi qui prima di terminare l'applicazione. Nella documentazione trovi come far scrivere lo stack delle chiamate in modo da capire dove hai l'eccezione non gestita (ok più o meno dove, diciamo il metodo)

    Se il tuo problema è dovuto ad una eccezione lo puoi identificare così, se dovuto ad altro con il log che ti ho suggerito: nel file di log sarà l'ultima chiamata che trovi.

  12. Julian S

    Jan 16 Pre-Release Testers, Xojo Pro UK
    1. Open project
    2. Press CTRL+F
    3. Type declare<enter>

    Do you see any results?

    Google translate (sorry) :)

    1. Apri progetto
    2. Premere CTRL + F
    3. Digitare declare <invio>

    Vedi qualche risultato?

  13. 3 days ago

    Nedi F

    Jan 16 Europe (Italy, Bologna)

    Grazie Antonio! Domani mi studierò per bene il tuo suggerimento.

    Julian, there are no declare in my project...

  14. Nedi F

    Jan 17 Europe (Italy, Bologna)

    Ho inserito il codice riportato nella guida, riguardo l'evento App.UnhandledExcpetion. Quando eseguo il programma mi visualizza a più riprese il MsgBox, con delle indicazioni che non mi dicono nulla. Lo fa anche nel punto in cui il programma andava in crash (applicazione.exe ha smesso di funzionare), però ovviamente non fa quello che dovrebbe fare.

    La cosa buffa è che, una volta cancellato l'evento, anziché comportarsi come faceva prima, mi viene visualizzato immediatamente un box con la dicitura "An exception of class IOException was not handled. The application must shut down. Exception Error Number: 2"

    Aiuto!!!

  15. Maurizio R

    Jan 17 Pre-Release Testers, Xojo Pro

    Ciao Nedi,
    se puoi riporta qui lo stack dell'errore (ovvero il testo contenente l'elenco delle funzioni annidate al momento dell'errore) che trovi dopo il messaggio dell'errore stesso.

  16. Nedi F

    Jan 17 Europe (Italy, Bologna)

    Grazie Maurizio per l'aiuto. Il programma scatena l'evento UnhandledException 4 volte, prima di arrivare al punto in cui prima andava in crash.
    1) Appena lanciato l'eseguibile:
    IOException

    TextInputStream.!Open%o<TextInputStream>%o<FolderItem>
    App.Event_Open%%o<App>
    Application._CallFunctionWithExceptionHandling%%o<Application>p
    enableMenuItems
    RuntimeRegisterAppObject
    RunFrameworkInitialization
    REALbasic._RunFrameworkInitialization%%p
    _Main
    wWinMain
    __chkstk
    BaseThreadInitThunk
    RtlUserThreadStart

    2) Subito dopo:
    NilObjectException

    RuntimeRaiseException
    RaiseNilObjectException
    clsOpzioni.GetData%s%o<clsOpzioni>i8
    Modulo.SetDatiConfig
    Main.Main.Event_Open%%o<Main.Main>
    Application._CallFunctionWithExceptionHandling%%o<Application>p
    enableMenuItems
    FireWindowOpenEvents
    Window.Constructor%%o<Window>
    Main.Main%o<Main.Main>%
    _MakeDefaultView
    _LateStartup
    RunFrameworkInitialization
    REALbasic._RunFrameworkInitialization%%p
    _Main
    wWinMain
    __chkstk
    BaseThreadInitThunk
    RtlUserThreadStart

    3) A questo punto viene visualizzata la window principale. Quando clicco il pulsante della funzione incriminata succede questo:
    NilObjectException

    RuntimeRaiseException
    RaiseNilObjectException
    Preventivo.Preventivo.CaricaPopupMarche%%o<Preventivo.Preventivo>
    Preventivo.Preventivo.Event_Open%%o<Preventivo.Preventivo>
    FireWindowOpenEvents
    Window.Constructor%%o<Window>
    Preventivo.Preventivo%o<Preventivo.Preventivo>%
    Main.Main.Preventivo%%o<Main.Main>
    Main.Main.btnPreventivo_Action%%o<Main.Main>o<BevelButton>
    Delegate.IM_Invoke%%o<PopupMenu>
    AddHandler.Stub.17%%

    RuntimeOnesCompliment
    serialClearBreak
    serialClearBreak
    CallWindowProcW
    DispatchMessageW
    enableMenuItems
    Application._CallFunctionWithExceptionHandling%%o<Application>p
    enableMenuItems
    RuntimeRun
    REALbasic._RuntimeRun
    _Main
    wWinMain
    __chkstk
    BaseThreadInitThunk
    RtlUserThreadStart

    4) Quando infine compilo un textfield e premo TAB (qui prima andava in crash con la dicitura "PuntoAutoService.exe ha smesso di funzionare"):
    NilObjectException

    RuntimeRaiseException
    RaiseNilObjectException
    clsv_VeicoliCli.GetTarga%%o<clsv_VeicoliCli>s
    Preventivo.Preventivo.txtveiTarga_KeyDown%b%o<Preventivo.Preventivo>o<MyTxt>s
    Delegate.IM_Invoke%b%o<BevelButton>s
    AddHandler.Stub.9%b%s
    editAppendText
    editAppendText
    selectColor
    serialClearBreak
    enableMenuItems
    Application._CallFunctionWithExceptionHandling%%o<Application>p
    enableMenuItems
    RuntimeRun
    REALbasic._RuntimeRun
    _Main
    wWinMain
    __chkstk
    BaseThreadInitThunk
    RtlUserThreadStart

    Spero vivamente che qualcuno mi possa dare qualche indicazione, altrimenti rinuncerò alla compilazione a 64 bit.

    Grazie mille.

  17. Maurizio R

    Jan 17 Pre-Release Testers, Xojo Pro
    Edited 3 days ago

    Mi sembra che il programma faccia riferimento ad un file di dati che pare non esistere.
    Forse e' un file preesistente che non viene copiato nel punto di destinazione previsto in fase di build?

    I messaggi cheriporti indicano chiaramente codice utente: dovresti verificare il codice di App.Open, clsOpzioni.GetData e cosi via.

  18. Nedi F

    Jan 17 Europe (Italy, Bologna)

    In effetti, caro Maurizio, mi ero scordato di copiare un file .ini nella cartella dell'eseguibile...di qui il primo dei 4 eventi UnhandledException.
    Adesso l'ho copiato e tutto fila liscio fino alla window principale. Quando clicco sul pulsante incriminato il programma va in crash, come faceva prima di inserire l'evento UnhandledException, e l'evento non viene scatenato, perché non mi segnala nulla.

    Può essere che prima o poi si chiarisca l'arcano. Deve per forza essere qualcosa presente in questo progetto, perché ne ho un altro che invece produce un compilato a 64 bit che funziona perfettamente.

    Grazie dei suggerimenti.

  19. 2 days ago

    Nedi F

    2 days ago Europe (Italy, Bologna)
    Edited 2 days ago

    Non è che il problema deriva dal fatto che in questo progetto uso SQL Server come database?
    Dico questo perché ho scritto precedentemente un'altra applicazione che utilizza SQLite, e il compilato a 64 bit di questa applicazione funziona perfettamente.

    L'ultimo test che ho fatto sull'applicazione che va in crash riguarda una funzione che dovrebbe leggere la tabella delle modalità di pagamento e caricarne i record in un Listbox. Ho inserito la scrittura di un record in un file di log ad ogni lettura di campo: ho eseguito il tutto 4 volte, e il programma va in crash in 4 punti differenti.

    Mi arrendo !!!

  20. Maurizio R

    2 days ago Pre-Release Testers, Xojo Pro
    Edited 2 days ago

    Non arrenderti, il mondo e' comunque in guerra...

    Fai sempre tutti i controlli del caso ovvero verifichi eventuali codici di errore ritornati dalle funzioni invocate, eventuali valori Nil di riferimenti a classi e cosi' via?
    Ricorda che nei messaggi di errore come quelli che hai riportato e' indicata la funzione che ha generato il problema quindi eventuali punti in cui qualche condizione fuori norma non e' gestita.
    La verifica delle condizioni interne ad un programma fa parte del programma stesso e non puo' essere considerata come accessoria e omessa.

    Alla fine delle verifiche otterai un programma funzionale, oltre che funzionante, e sicuramente di maggiore soddisfazione per l'utente che avra' utili indicazioni su come procedere invece che alienazione e buio dove brancolare.

    Non arrenderti!!

  21. Nedi F

    2 days ago Europe (Italy, Bologna)

    Grazie Maurizio per l'incoraggiamento!!
    In effetti, essendo io un Ariete, sono piuttosto testardo e non mi arrendo facilmente.

    Infatti ho dato voce al sospetto che mi era venuto, per cui ho sostituito MSSQLServerDatabase con ODBCDatabase e tutto funziona alla grande!!!!

    Quindi il problema è il plugin che, evidentemente, a 64 bit ha dei grossi problemi.

    Se qualcuno ha voglia di verificare la veridicità di quanto affermo fa un grosso favore non solo a me, ma a tutta la comunità di sviluppatori in Xojo!

    Nedi

or Sign Up to reply!