Ik heb een vb6 programma dat soms een Overflow error genereert en dan crashed.
Het probleem is dat ik nog niet heb uitgevonden waar de overflow juist plaatsvind in de code.
Ik kan het programma ook niet in de vb debug mode starten, omdat dat problemen geeft met de dll referenties.
Ik heb eindelijk een aantal opeenvolgende handelingen gevonden die wel steeds de error genereren.
Nu dacht ik dus de applicatie te debuggen met behulp van visual c++ 6, wat normaal geen probleem is als ik in vb debug informatie laat maken tijdens het compileren.
Het probleem is echter dat als ik de exe start in visual c++ met debug->go (in visual c is een project geopend van een dll die ook gebruikt wordt door het vb programma) dat ik dan de error niet opnieuw gegenereerd krijg.
Ik heb ook al in de belangrijkste functies waar de fout zou kunnen zitten een On Error toegevoegd die dan wat error informatie weergeeft over de functie waarin de fout gebeurd.
Ook heb ik al gezocht naar alle delingen die gebeuren en gekeken of de code daarrond niet zorgt voor floating point delingen door (bijna) nul die vaak overflows geven, maar die zijn er ook niet meer denk ik.
Omdat de error er opkomt in een gewone message box (zoals vb6 dat altijd doet bij fouten die het zelf kan opvangen) neem ik aan dat de fout niet gegenereerd wordt door de gebruikte dll's, dus denk ik dat ik me kan beperken tot de visual basic code om de fout in te zoeken.
Is er iemand hier die eventueel nog suggesties heeft om de fout te vinden?
Ik zit er echt al een paar uur op te zoeken, en ik kan de fout echt niet vinden.
Doordat de fout niet altijd optreed heb ik ze dus ook niet ontdekt toen ik waarschijnlijk de code verandert heb die nu tot de fout leid.
Update: Het wordt weer allemaal lekker vaag
Ik heb een functie die in het programma erg vaak gebruikt wordt, die een tijd in milliseconden teruggeeft op basis van timerPerformanceCounter en timerPerformanceFrequency.
Deze functie deelt de counter door de frequency (deze worden eerst beide in een Currency variabele ingelezen, omdat Currency de enige 64-bit integer representatie in vb is) waarna het resultaat wordt ge mod tot het bereik van een 32-bit Long integer die dan wordt teruggegeven.
Deze functie is er al bijna van in het begin en heeft nooit voor problemen gezorgd.
Als ik er nu een On Error vooraan en achteraan een errorhandler die een msgbox met de err.Description geeft aan toevoeg, dan krijg ik wel de messagebox, maar geen description.
Als ik de on error weghaal krijg ik weer gewoon de Overflow error via visual basic.
Ik heb nu echter ook soms de error al kunnen opvangen in andere functie dmv On Error, en daar is de Description wel juist.
Het probleem is dat ik nog niet heb uitgevonden waar de overflow juist plaatsvind in de code.
Ik kan het programma ook niet in de vb debug mode starten, omdat dat problemen geeft met de dll referenties.
Ik heb eindelijk een aantal opeenvolgende handelingen gevonden die wel steeds de error genereren.
Nu dacht ik dus de applicatie te debuggen met behulp van visual c++ 6, wat normaal geen probleem is als ik in vb debug informatie laat maken tijdens het compileren.
Het probleem is echter dat als ik de exe start in visual c++ met debug->go (in visual c is een project geopend van een dll die ook gebruikt wordt door het vb programma) dat ik dan de error niet opnieuw gegenereerd krijg.
Ik heb ook al in de belangrijkste functies waar de fout zou kunnen zitten een On Error toegevoegd die dan wat error informatie weergeeft over de functie waarin de fout gebeurd.
Ook heb ik al gezocht naar alle delingen die gebeuren en gekeken of de code daarrond niet zorgt voor floating point delingen door (bijna) nul die vaak overflows geven, maar die zijn er ook niet meer denk ik.
Omdat de error er opkomt in een gewone message box (zoals vb6 dat altijd doet bij fouten die het zelf kan opvangen) neem ik aan dat de fout niet gegenereerd wordt door de gebruikte dll's, dus denk ik dat ik me kan beperken tot de visual basic code om de fout in te zoeken.
Is er iemand hier die eventueel nog suggesties heeft om de fout te vinden?
Ik zit er echt al een paar uur op te zoeken, en ik kan de fout echt niet vinden.
Doordat de fout niet altijd optreed heb ik ze dus ook niet ontdekt toen ik waarschijnlijk de code verandert heb die nu tot de fout leid.
Update: Het wordt weer allemaal lekker vaag
Ik heb een functie die in het programma erg vaak gebruikt wordt, die een tijd in milliseconden teruggeeft op basis van timerPerformanceCounter en timerPerformanceFrequency.
Deze functie deelt de counter door de frequency (deze worden eerst beide in een Currency variabele ingelezen, omdat Currency de enige 64-bit integer representatie in vb is) waarna het resultaat wordt ge mod tot het bereik van een 32-bit Long integer die dan wordt teruggegeven.
Deze functie is er al bijna van in het begin en heeft nooit voor problemen gezorgd.
Als ik er nu een On Error vooraan en achteraan een errorhandler die een msgbox met de err.Description geeft aan toevoeg, dan krijg ik wel de messagebox, maar geen description.
Als ik de on error weghaal krijg ik weer gewoon de Overflow error via visual basic.
Ik heb nu echter ook soms de error al kunnen opvangen in andere functie dmv On Error, en daar is de Description wel juist.
[ Voor 23% gewijzigd door Adion op 31-03-2003 14:35 ]