Article View: pl.comp.lang.delphi
Article #347169Re: callChain
From: Tomek D
Date: Fri, 26 Jun 2020 12:18
Date: Fri, 26 Jun 2020 12:18
18 lines
2851 bytes
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-mailReferences:
<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