Jak w debbugerze zignorować fragmenty kodu?

0

XE 2 mam, czasami robię jakiś drobny program, ale ma jakieś wątki lub inne rzeczy, które wykonują się non stop i jeśli odpalę domyślnie Trace Into (F7) i po kolei klikam w ten przycisk to przy wątkach, pętlach niekończących się, timerze, malowaniu lub czymś innym, mógłbym do końca istnienia wszechświata klikać to F7 i nie doczekałbym się obejrzenia działania kliknięcia np. w button1, dlatego muszę wiedzieć jak w kodzie mogę zaznaczyć linijki kodu (lub większe fragmenty), które debbuger ma olewać. Proszę więc udzielić mi tej porady. Dziękuję za uwagę.

1

A od czego są BreakPointy stawisz na początku istniejącego cie fragmentu kodu program się zatrzymuje i możesz debugować.

1

Znam jedną taką opcję - stawiasz BreakPointy tam, gdzie program ma się zatrzymać i przez kolejne instrukcje wymagające sprawdzenia używasz F7 bądź F8 (aby np. nie wchodzić do wnętrza własnej procedury/funkcji/metody/kontruktora), a po sprawdzeniu danego kawałka kodu wciskasz F9 i program zaczyna normalnie działać, aż do napotkania kolejnego BreakPointa;

Ale to jest tylko mój sposób - może bardziej zaawansowani użytkownicy podpowiedzą jakiś lepszy sposób; Ja osobiście nie posiadam Delphi XE2, więc nie znam wszystkich jego możliwości i funkcjonalności.

0

Olewać to znaczy pomijać, nie brać pod uwagę. Więc może po prostu je zakomentuj?

0

@babubabu - jeśli zakomentujesz kod, to debuger nie będzie brał pod tych instrukcji pod uwagę, ale trudno się dziwić, jak w ten sposób wyłączy się te instrukcje z kompilacji; Pytaczowi nie chodzi o to jak się pozbyć kodu z kompilacji (bo można go albo zakomentować, albo po prostu usunąć), tylko jak pomijać podczas debugowania dany fragment kodu;

Więc jedynym sensownym rozwiązaniem jest postawienie BreakPointów i właściwa ich obsługa, żeby nie rozpieprzyć klawiszy F7/F8; Stawiasz BP na instrukcji, od której ma się rozpocząć debugowanie, program się na niej zatrzymuje, debugujesz dany fragment kodu do momentu, aż uzna się, że wystarczy; Następnie żeby pominąć dany fragment kodu to stawia się kolejny BP po bloku, który nie ma być debugowany (tzn. debugowany ręcznie) i wznawia się pracę programu klawiszem F9 - wtedy program o ile nie wygeneruje wyjątku - normalnie wykona instrukcje i zatrzyma się na kolejnym BP; W ten sposób ominie się dany blok i problem z głowy;

Jednak aby sprawnie obsługiwać debuger należy się najpierw tego nauczyć i co nieco na ten temat poczytać - np. w tym artykule są podstatowe informacje na temat debugowania programów w Delphi - wystarczy okiem rzucić i samemu spróbować.

1

Ja robię to tak.

  1. w części globalnej:
//{$DEFINE TEST_MODE}
DoKindA,DoKindB,...,DoKindZ:Boolean;
  1. tam gdzie chcę pominąć:
{$IFDEF TEST_MODE}if DoKindA then begin{$ENDIF}
  ...//
  ...// tu pomijany fragment
  ...//
{$IFDEF TEST_MODE}end;{$ENDIF}

Domyślnie będzie pomijany ale jak włączę przez <Ctrl-F7> DoKindA = true to już nie jest pomijany.

0

Podejrzewam, że autor wie jak debugować program i chodzi mu o coś innego. W VS są tak zwane "conditional breakpoint" (Debugowanie warunkowe) i tego zapewne szuka autor. Nie posiadam tego środowiska, ale wiesz pod jakimi hasłami tego szukać.

1

@szopenfx nie wiem czy o to dokładnie chodzi (nie mam VS) ale coś takiego jest w Delphi:
Weźmy prosty przykładowy kod:

var
  i: Integer;
begin
 for i:=0 to 10 do
   Memo1.Lines.Add(IntToStr(i));
end;

Ustawiamy kursor w linii na której chcemy postawić breakpointa i z menu Run -> Add Breakpoint wybieramy np. Source Breakpoint... w polu Condition wpisujemy warunek np.: i = 5 zatwierdzamy OK. Po uruchomieniu programu program się zatrzyma w linii gdzie znajduje się breakpointa ale dopiero wtedy gdy zmienna "i" osiągnie wartość 5.

1 użytkowników online, w tym zalogowanych: 0, gości: 1