🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: callChain

#347169
From: Tomek D
Date: Fri, 26 Jun 2020 12:18
18 lines
2851 bytes
W dniu 26.06.2020 o 14:03, apl pisze:
> 
> 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.

Może nie rozumiem problemu autora wątku, ale w środowisku Delphi podczas 
debugowania jest dostępne okno "Call stack", które pokazuje ścieżkę 
wywołań. I nie wymaga modyfikacji kodu źródłowego.

Ponadto mamy zewnętrzne narzędzia takie jak madExcept, EurekaLog, 
CodeSite, które wydatnie ułatwiają lokalizację błędów.

Tomek D.
Technical Details
Message-ID: <rd4p1j$f9t$1@gioia.aioe.org>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!feeder1.feed.usenet.farm!feed.usenet.farm!aioe.org!.POSTED.qN0w9OwqgO6LQiWa6TmVbg.user.gioia.aioe.org!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!3.eu.feeder.erje.net!feeder.erje.net!feeder1.feed.usenet.farm!feed.usenet.farm!aioe.org!.POSTED.qN0w9OwqgO6LQiWa6TmVbg.user.gioia.aioe.org!not-for-mail
From: Tomek D <brak@adresu.invalid>
Newsgroups: pl.comp.lang.delphi
Subject: Re: callChain
Date: Fri, 26 Jun 2020 14:18:00 +0200
Organization: Aioe.org NNTP Server
Lines: 18
Message-ID: <rd4p1j$f9t$1@gioia.aioe.org>
References: <81b9653c-e77c-444e-9e47-38872c9e3853o@googlegroups.com>
NNTP-Posting-Host: qN0w9OwqgO6LQiWa6TmVbg.user.gioia.aioe.org
Mime-Version: 1.0
X-Complaints-To: abuse@aioe.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0
X-Notice: Filtered by postfilter v. 0.9.2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit