🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #347173

Re: callChain

#347173
From: apl
Date: Fri, 26 Jun 2020 19:20
48 lines
4014 bytes
W dniu piątek, 26 czerwca 2020 14:03:13 UTC+2 użytkownik apl napisał:
> Drodzy koledzy,
> każdy z was wie, jakim koszmarem jest debugowanie programu, zwłaszcza takiego, do którego sięgamy po wielu latach celem przebudowy nie mówiąc już o cudzych kodach źródłowych.
> Bardzo pomocna w tym przypadku jest znajomość całego łańcucha wołań prowadzących do danego podprogramu.
> W tym poście chciałbym podzielić się bardzo prostym wynalazkiem i poddać go waszej krytycznej ocenie. 
> Przypuśćmy, że śledzonym podprogramem jest procedure sub2.
> Mój "chwyt" polega na dodaniu parametru formalnego callChain:string przekazywanego przez wartość oraz na zamieszczeniu na początku treści wykonawczej instrukcji callChain:=callChain+'>sub2'; Zabieg ten należy powtórzyć w każdym podprogramie wołającym wybrany śledzony (tu: sub2) z tym, że zamiast sub2 wpisujemy nazwę podprogramu wołającego z dodatkiem znaku '>' rozdzielającego nazwy w tworzonym łańcuchu. Krytyczne fragmenty treści sub2 obejmujemy instrukcją try except end, gdzie zamieszczamy showMessage informujący o błędzie. W przypadku iteracji, czy rekurencji przydatne będzie proliferowanie wartości zmiennych sterujących - dodajemy wtedy wymagane parametry formalne przekazywane przez wartość. Poniżej zamieszczam maksymalnie uproszczony przykład ilustrujący tę ideę zawierający iterację i rekurencję, stąd parametry i,n:word.
> Tak wzbogacony program daje nieoceniony wgląd w bieżący stan wykonania programu odczytując aktualną wartość callChain. Program niejako buduje się sam, żądając brakujących parametrów formalnych podczas kompilacji.
> Tym postem chciałbym zapoczątkować wakacyjną akcję dzielenia się na tym forum swoimi chwytami warsztatowymi. Gorąco zachęcam!!!
> Pozdrawiam, apl
> 
> P.S. Błagam, powiedzcie PADowi NIE!!!
> 
> 
>  procedure sub2(callChain:string;i,n:word);
>   var   r:real;
>  begin
>   callChain:=callChain+'>sub2';
>   r:=0;
>   try      //enclosure of a critical fragment
>    r:=r/r;
>   except
>     showMessage('Error occured in a call chain "'+callChain+'". Iteration step='+intToStr(i)+'. Recursion step='+intToStr(n))
>   end;
>  end;{sub2}
> 
>  procedure sub1(callChain:string;i,n:word);
>  begin
>   callChain:=callChain+'>sub1';
>   sub2(callChain,i,n);
>  end;{sub1}
> 
> procedure sub0(callChain:string;n:word);
>  var   i:shortInt;
>  begin
>   callChain:=callChain+'>sub0';
>   for i:=0 to 5 do sub1(callChain,i,n);
>   if n<3 then sub0(callChain,n+1);  //recursion
>  end;{sub0}
> end.
> 
> Wołanie z poziomu formatki, to np.:
> 
> 
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>  sub0('>TForm1.Button1Click',0);
> end;
Technical Details
Message-ID: <a0b5eb78-06c2-4816-b268-16dab7e3f701o@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:ad4:5533:: with SMTP id ba19mr4678624qvb.110.1593199235742;        Fri, 26 Jun 2020 12:20:35 -0700 (PDT)
X-Received: by 2002:a9d:6b19:: with SMTP id g25mr3845315otp.160.1593199235440; Fri, 26 Jun 2020 12:20:35 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Fri, 26 Jun 2020 12:20:35 -0700 (PDT)
In-Reply-To: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=109.173.147.252; posting-account=ukiAYgoAAADpsCfFgVYs3wM73JlzLYyB
NNTP-Posting-Host: 109.173.147.252
References: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <a0b5eb78-06c2-4816-b268-16dab7e3f701o@googlegroups.com>
Subject: Re: callChain
From: apl <apl@icpnet.pl>
Injection-Date: Fri, 26 Jun 2020 19:20:35 +0000
Lines: 74
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit