Article View: pl.comp.lang.delphi
Article #347173Re: callChain
From: apl
Date: Fri, 26 Jun 2020 19:20
Date: Fri, 26 Jun 2020 19:20
48 lines
4014 bytes
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-mailReferences:
<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