Avatar billede adagio Nybegynder
04. december 2002 - 14:37 Der er 29 kommentarer og
1 løsning

Underlig crash i vb og program!?!

Lige nu sidder jeg med et program, hvor jeg oplever at det crasher. Er det normalt at vb også lukker ned, når jeg kører programmet via vb?

Lige nu har jeg et problem med programmet (en filmliste program), hvor programmet ca. hver 10. gang jeg vælger at redigere i film-info, crasher, uden nogen som helst fejlmeddelelser. (Har ikke oplevet crashet, når jeg tilføjer en ny film til listen)

Jeg er kommet frem til, at fejlen må ligge i følgende kode:

Private Sub readListe()

Text6.Text = (App.Path & "\List\" & Text5.Text & "_list.txt")
Text7.Text = (App.Path & "\List\")
Text8.Text = (Text5.Text & "_list.txt")

    With fso
        strName = (App.Path & "\List\" & Text5.Text & "_list.txt")
        Set Strm = .OpenTextFile(strName, ForReading)
        With Strm
          Do Until .AtEndOfStream

                Text4.Text = Text4.Text & .ReadLine & vbCrLf

            Loop
        End With
    End With
    Text4.Text = Text4.Text & txtFilmtitel.Text
    Exit Sub
   
End Sub
Avatar billede adagio Nybegynder
04. december 2002 - 14:40 #1
Programmet er forholdsvist simpelt. Det mest avancerede jeg bruger i programmet er kopier/læs jpg filer, og læs skriv txt filer
Avatar billede jesperthomsen Nybegynder
04. december 2002 - 14:43 #2
Kan det være så enkelt at du simpelt hen skriver for meget data i text4? Altså, hvis der er mange film, så kunne det jo tænkes at du fik et overflow et eller andet sted og så vil den knække halsen.
Avatar billede adagio Nybegynder
04. december 2002 - 14:45 #3
Jeg har brugt msgbox metoden til at komme lidt tættere på, og det crashede i dette her kode:

    With fso
        strName = (App.Path & "\List\" & Text5.Text & "_list.txt")
        Set Strm = .OpenTextFile(strName, ForReading)
        With Strm
Avatar billede jesperthomsen Nybegynder
04. december 2002 - 14:49 #4
DET var mystisk - jeg har altid brugt textstreams et hav af gange og det har altid fungeret upåklageligt. Jeg går ud fra at du har tjekket at filen faktisk findes?
Avatar billede adagio Nybegynder
04. december 2002 - 14:49 #5
Jeg har nu også prøvet at bruge MsgBox(Text5) lige før With fso, og den viste det den skulle vise...
Avatar billede adagio Nybegynder
04. december 2002 - 14:52 #6
Ja, filen findes (Har lige tjekket, men ellers burde det ikke tage 10-20 forsøg før det kommer til crashet). Og den fil, skal også bruges, før man overhovedet kan redigere/tilføje en film
Avatar billede jesperthomsen Nybegynder
04. december 2002 - 14:52 #7
Igen, ikke fordi jeg tror det er problemet, men måske du skulle prøve at fjerne en with? Altså, sådan her:

strName = (App.Path & "\List\" & Text5.Text & "_list.txt")
Set Strm = fso.OpenTextFile(strName, ForReading)
With Strm
Avatar billede jesperthomsen Nybegynder
04. december 2002 - 14:53 #8
Hov, du lukker aldrig filen, ser det ud til. Det ville jeg lige gøre i slutningen af sub'en

strm.close
set strm = nothing

set fso = nothing
Avatar billede martin_moth Mester
04. december 2002 - 14:59 #9
Er du også sikker på at strName indeholder det rigtige (prøv Msgbox strName )
Avatar billede adagio Nybegynder
04. december 2002 - 15:00 #10
Jeg tror det ser ud til at virke, jeg har lige prøvet 60+ gange, og det har ikke crashet endnu. Men jeg holder lige spørgsmålet åbent lidt endnu, for at være helt sikker
Avatar billede adagio Nybegynder
04. december 2002 - 15:51 #11
Efter lidt flere prøve-tests, så har jeg nu fundet ud af, at programmet stadig crasher
Avatar billede adagio Nybegynder
04. december 2002 - 15:55 #12
Jeg har lige prøvet at slette with fso, og end with. Så må jeg se om det bliver bedre...
Avatar billede adagio Nybegynder
04. december 2002 - 16:01 #13
Jeg har også lige prøvet Msgbox strName, men den ser rigtig nok ud. Jeg smed den ind, lige under strName = (App.path...). Den crasher lige efter msgboxen er blevet vist...
Avatar billede adagio Nybegynder
04. december 2002 - 16:03 #14
Af en eller anden grund, så virker det, som om at det kun crasher, når jeg tilføjer covers til filmen. Men det giver ikke noget mening, eftersom at ved tilføjelse af covers, så er det intet af det, som nævnes i overnævnte kode, der bliver ændret...
Avatar billede jesperthomsen Nybegynder
05. december 2002 - 08:13 #15
Hvad laver du med covers? Uforklarlige crash skyldes tit hukommelse der ikke bliver ryddet; glemmer du at frigive hukommelsesområder? Hvis du gør, kan crashet opstå uafhængigt af hvor problemet er opstået.
Avatar billede adagio Nybegynder
05. december 2002 - 13:13 #16
I den form, hvor crashet opstår, bliver covers kun kopieret til et andet bibliotek, men til gengæld, så (når jeg henter covers) bliver der lavet en thumbnail af billedet, i en anden form...så det kan måske have noget at gøre med hukkommelsen, sådan noget har jeg ikke pillet ved før.
Avatar billede jesperthomsen Nybegynder
05. december 2002 - 13:16 #17
Alle de objekter du har skal sættes til nothing når du er færdig med dem. Og recordsets og filer skal lukkes. Godt nok har VB garbage collection, men den fungerer ikke optimalt. Reelt skal du for hver set x = et-eller-andet, have en set x = nothing
Avatar billede adagio Nybegynder
05. december 2002 - 13:21 #18
Ok, det vidste jeg ikke, tak for infoen. Det prøver jeg at kigge på senere i dag :o)
Avatar billede adagio Nybegynder
05. december 2002 - 14:20 #19
Nu har jeg prøvet at lukke alt der åbnes, men jeg er lidt i tvivl om jeg har lukket det rigtige her:

StrFile = (Dir1.Path & "\" & File1.FileName)
(...)
picTemp.Picture = LoadPicture(StrFile)
(...)
StrFile = Nothing (har også prøvet med: StrFile.Close)

Ved at gøre sådan, så crasher den stadig.
Avatar billede adagio Nybegynder
05. december 2002 - 14:36 #20
Fandt lige en mindre fejl, som måske har kunnet sørge for at jeg ikke lukkede rigtigt, så jeg lavede lige 46 tests uden at det crashede. Håber at det virker nu så, men jeg holder den lige åbent til at jeg har lavet flere tests...
Avatar billede adagio Nybegynder
05. december 2002 - 18:34 #21
Efter en ca. 50 mere tests, så crashede programmet igen :o(
Avatar billede adagio Nybegynder
05. december 2002 - 18:37 #22
Jeg kan uploade programmet, vis i har lyst til at se nærmere på det, men jeg gætter på at det er noget svært at finde rundt i, eftersom jeg ikke er helt vildt god til at lave kommentarer (glemmer det hele tiden). Og programmet er ikke ligefrem skrevet profssionelt, så der er sikkert meget ubrugeligt kode i programmet...
Avatar billede jesperthomsen Nybegynder
06. december 2002 - 08:38 #23
Jeg kan ikke nå at se alverden på det før mandag alligevel. Prøv at se om du kan fange fejlen ved at sætten en errorhandle ind i rutinen. Det kan jo tænkes at du kan få en fejlkode, og så har du da lidt at gå efter.
Avatar billede lovix Nybegynder
06. december 2002 - 20:21 #24
Bare et godt råd:

Skriv ALTID doevents inde i en "Do-Loop"!

-LoViX-
Avatar billede adagio Nybegynder
09. december 2002 - 14:12 #25
errorhandler? De eneste errorhandler's (?) jeg har set, er hvor man skriver:

on error goto fejl
(kode)
exit sub
fejl:
(kode)
end sub
Avatar billede jesperthomsen Nybegynder
09. december 2002 - 14:25 #26
Netop, sådan en errorhandler. Der kan du muligvis nå at fange en eventuel fejl.

Jeg er ikke helt enig i LoViX kommentar. En Dovents kan være praktisk i mange tilfælde, men nogle gange er man absolut ikke interesseret i at brugeren kan klikke løs i grænsefladen mens en rutine er i gang. Og hvis der skal være en DoEvents er det en god ide kun at sætte den til for et vist antal gennemløb; altså, så den kun kører for hver 10 eller 20 gennemløb, for ellers kan den trække gevaldige ressourcer ud.
Avatar billede adagio Nybegynder
09. december 2002 - 14:49 #27
Ok, tak for infoen.

Jeg prøver så i aften at sætte en errorhandler ind, der hvor fejlen opstår, men en sådan errorhanlder laver jo ikke en fejlkode, den hopper jo bare ned, til et andet sted i koden (eller efter koden), hvor den så kun kommer med den information, jeg selv siger at den skal komme med, vis den finder en fejl... eller er det noget jeg har misforstået her?
Avatar billede jesperthomsen Nybegynder
09. december 2002 - 14:58 #28
Næh, det er sådan set rigtig nok. Du får bare sendt programpointeren et andet sted hen og så må du selv tage over. En almindelig og simpel fejlhåndtering kan være bare at skrive fejlnr og beskrivelse i en messagebox.
Avatar billede adagio Nybegynder
09. december 2002 - 15:06 #29
Jeg har lagt kildekoden op her: http://www27.brinkster.com/zcollection/Kilde.htm

Men som sagt, så er det måske lidt svært at finde rundt i. (Grunden til at der findes en tilføj spil sektion, er fordi jeg ikke er blevet færdig med den afdeling endnu) og grunden til at de få hjælpe-texter der er står på engelsk, er fordi jeg måske vil uploade programmet til planet-source-code (når programmet engang bliver færdigt... altså har de features, som det skal have, og er forhåbentligt crash-fri...)
Avatar billede adagio Nybegynder
13. december 2002 - 19:35 #30
Nå, det ser ikke ud til at komme nogen brugbare svar, så jeg takker for forsøget på at hjælpe mig, og lukker hermed spørgsmålet...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester