Avatar billede hatecaps Nybegynder
06. juli 2004 - 18:22 Der er 11 kommentarer og
1 løsning

Hvordan fanger jeg access violations

Hejsa,

hvordan er det lige man fanger access violations i et program. Jeg har et program der kører uovervåget. Det kigger hele tiden i et bestemt bibliotek, og når der ligger en eller flere filer i det udføres en del opgaver med disse filer. Af og til når vi kigger på programmet ligger der et væld af access violation vinduer, og vi har hidtil ikke været i stand til at finde fejlen. Det jeg mest har brug for er noget a la try-except, hvor except udføres ved en access violation. Jeg mener at kunne huske noget om at man med compiler direktiver kan få den alm. try-except til også at fange access violations. Er der noget om det ?

ha' det godt
hatecaps
Avatar billede stoney Nybegynder
06. juli 2004 - 20:20 #1
procedure TForm1.Button1Click(Sender: TObject);
var

arr : Array of integer;
begin
setlength(arr,1);
arr[0] := 1;

try
showmessage(inttostr(arr[400]));
except
        on E: Exception do
        showmessage(e.Message);
        // her kan du evt. skrive fejlen i en log
end;
end;

Kør programmet et par gange uden for IDE, så kommer den og siger fejlen

Stoney
Avatar billede hatecaps Nybegynder
07. juli 2004 - 12:09 #2
Hej Stoney,

mit problem er at de access violations jeg får ikke bliver fanget af en "almindelig" try-except
Avatar billede jonat Nybegynder
07. juli 2004 - 13:26 #3
Her er løsningen på dit problem: http://www.eksperten.dk/spm/459589#rid4286348

// Jonat.
Avatar billede hatecaps Nybegynder
07. juli 2004 - 13:31 #4
øhh, jonat, hvor i det spørgsmål er det lige at jeg kan læse om hvordan jeg fanger mine access violations ???
Avatar billede jonat Nybegynder
07. juli 2004 - 13:46 #5
Eht snakker om noget der hedder Eurokalog, som kan registrer alle fejlmeddelser og access violations.

Kik i:
Accepteret svar: eht
01/02-2004 10:20:13
Point: 200,00

// Jonat.
Avatar billede hatecaps Nybegynder
07. juli 2004 - 18:41 #6
ok, jeg er i gang med at kigge på produktet, umiddelbart ser det lovende ud, men jeg var egentlig ude efter noget jeg selv kunne kode. Lad os se hvordan det går :)
Avatar billede hrc Mester
07. juli 2004 - 21:58 #7
På nettet er jeg stødt på http://www.madshi.net/olddlp0.htm og har hørt meget godt om MadCollection. I den er der bl.a. et avanceret fejlrapporteringsystem og måske også et fejlhåndteringssystem. Jeg er først selv begyndt at lege med det.

Alternativt kan du måske bruge Application.OnException - her burde dine ikke-fangede exceptions også dukke op:

procedure HandleMySloppyCoding(Sender: TObject; E: Exception);
const
  filename = 'c:\log.txt';
var
  fp : textfile;
begin
  assignfile(fp,filename);
  if FileExists(filename) then
    Append(fp)
  else
    Rewrite(fp);

  try
    writeln(fp,format('%s: %s',[DateTimeToStr(now),e.message]));
  finally
    closefile(fp);
  end;
end;
Avatar billede hrc Mester
07. juli 2004 - 21:59 #8
I formens OnCreate event:

  Application.OnException := HandleMySloppyCoding;
Avatar billede hatecaps Nybegynder
07. juli 2004 - 23:29 #9
hrc >> den løsning har jeg også tænkt på, spørgsmålet er bare om den også fanger access violations, og hvor "let" det er bagefter at se hvor det gik galt. Jeg vender tilbage når jeg har prøvet mig lidt frem
Avatar billede jonat Nybegynder
08. juli 2004 - 07:52 #10
Den Eurokalog som jeg snakker om, siger præsist hvilken linje at der kom fejl. sådan at den netop er nem at fange fejl, også sjældnere fejl, hvis den kommer med ud til dem der køber programmet... :-D

// Jonat.
Avatar billede hrc Mester
08. juli 2004 - 16:33 #11
Så vidt jeg foreløbigt kan se, går MadCollection ind og erstatter Delphi's exception-styring. Oveni er der nu en avanceret dump-de-vigtige-oplysninger funktion.

Uden at have set Eurokalog kan jeg godt tro at det er det samme den gør.

Jeg skal prøve at teste MadCollection lidt, men det er svært for jeg laver aldrig fejl ;-) ;-) ;-)
Avatar billede hatecaps Nybegynder
14. juli 2004 - 20:12 #12
jeg fik hrc's løsning til at virke, og da jeg egentlig var ude efter en måde jeg selv kan kode går pointene til ham.

ha' det godt
hatecaps
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