🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: callChain

#347174
From: Roman Tyczka
Date: Fri, 26 Jun 2020 15:27
55 lines
3817 bytes
On Fri, 26 Jun 2020 05:03:12 -0700 (PDT), apl wrote:

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

Program, który wkleiłeś nie zadziała jak opisałeś, sprawdź.

-- 
pozdrawiam
Roman Tyczka
Technical Details
Message-ID: <11s1yocj1ipmk.dlg@tyczka.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.stu.neva.ru!aioe.org!peer01.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.stu.neva.ru!aioe.org!peer01.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: Roman Tyczka <noemail@because.no>
Subject: Re: callChain
Newsgroups: pl.comp.lang.delphi
User-Agent: 40tude_Dialog/2.0.15.84
MIME-Version: 1.0
Sender: romek@tyczka.no.found
References: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>
Date: Fri, 26 Jun 2020 17:27:36 +0200
Message-ID: <11s1yocj1ipmk.dlg@tyczka.com>
Lines: 55
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 94.75.90.137
X-Trace: 1593185256 unt-rea-a-01.news.neostrada.pl 17352 94.75.90.137:8798
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 3599
X-Received-Body-CRC: 3630171042
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit