Compilazione 64 bit

Ciao a tutti, sto utilizzando da poco Xojo 2017r3 in ambiente Windows, e pochi giorni fa ho scoperto che, da ambiente Windows e Linux, non possibile compilare a 64 bit per MacOS: me lo confermate?

Secondo quesito: ho due progetti scritti in Xojo e li compilo entrambi per Windows a 64 bit. Uno dei due eseguibili funziona, l’altro va in crash. Sicuramente quello che va in crash conterr qualcosa che fa a pugni con le macchine a 64 bit, anche se non ho idea di cosa possa essere. Aggiungo che l’esecuzione dei programmi compilati avviene sulla stessa macchina sulla quale sono stati sviluppati.
Qualcuno mi pu dare qualche suggerimento per scoprire cosa non va?

Grazie a tutti!!

Nedi

Nessuna risposta…sigh!!!

You will get more responses if you post in english. And the Windows channel would be best if Google translate is correct.

Do the crashes happen on compile time or during execution?

Thank you for your answer, Beatrix. The program crashes when I execute the compiled program.

Nedi, we need way more information:

  • Can you identify the code where the app crashes? Startup or later?
  • Do you get an error message?
  • AFAIR you need to install a special app on the Windows to analyze crashes. Have you don that?
  • Does the app always crash at the same place/action?
  • Does the app not crash during debugging?
  • For 64bit the build folders change - at least they do on the Mac side. Have you updated all your IDE scripts so that everything is also included in your 64bit app?

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!

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 .

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.

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.

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

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…

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!

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)

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!

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.

  1. Open project
  2. Press CTRL+F
  3. Type declare

Do you see any results?

Google translate (sorry) :slight_smile:

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

Vedi qualche risultato?

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

Julian, there are no declare in my project…

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!!!

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.

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%o
App.Event_Open%%o
Application._CallFunctionWithExceptionHandling%%op
enableMenuItems
RuntimeRegisterAppObject
RunFrameworkInitialization
REALbasic._RunFrameworkInitialization%%p
_Main
wWinMain
__chkstk
BaseThreadInitThunk
RtlUserThreadStart

  1. Subito dopo:
    NilObjectException

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

  1. 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
Preventivo.Preventivo%o<Preventivo.Preventivo>%
Main.Main.Preventivo%%o<Main.Main>
Main.Main.btnPreventivo_Action%%o<Main.Main>o
Delegate.IM_Invoke%%o
AddHandler.Stub.17%%

RuntimeOnesCompliment
serialClearBreak
serialClearBreak
CallWindowProcW
DispatchMessageW
enableMenuItems
Application._CallFunctionWithExceptionHandling%%op
enableMenuItems
RuntimeRun
REALbasic._RuntimeRun
_Main
wWinMain
__chkstk
BaseThreadInitThunk
RtlUserThreadStart

  1. 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>os
Delegate.IM_Invoke%b%os
AddHandler.Stub.9%b%s
editAppendText
editAppendText
selectColor
serialClearBreak
enableMenuItems
Application._CallFunctionWithExceptionHandling%%op
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.