Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - Debugger verzus JCL (to: Jan Fiala)

Majme takýto jednoduchý program:
[pas]unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
procedure ulozhodnotu(h: integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ulozhodnotu(h: integer);
begin
h := StrToInt(Edit1.Text); //skutočnosť
end;

procedure TForm1.FormActivate(Sender: TObject);
var
h: integer;
begin
ulozhodnotu(h); //debugger
end;

end.
[/pas]
Na prvý pohľad je jasné, že ak v Edit1 nebude celé číslo reprezentované vo vlastnosti Text, tak sa program zrúti. Debugger túto chybu vyhlási na označenom mieste a pri krokovaní nájdeme skutočné miesto chyby. Kde nájde chybu JCL? Ide o to, že som mal teraz podobný problém a takmer ma od jedu porazilo (nevedel som, kde to stále vidí chybu a hľadal som chybu v inom riadku než bola).:-(

Předmět Autor Datum
Nevim, jak ty, ale ja dostanu tohle: Exception class: EConvertError Exception address: 00408336 ---…
Jan Fiala 17.03.2006 07:22
Jan Fiala
Práveže nie, ja tam JCL ešte nemám. Ešte sa to len chystám začať používať, tak som chcel, aby ste vy…
msx. 17.03.2006 16:36
msx.
Tak som to nainštaloval a teraz neviem čo. Pridali sa mi aj dialógy vo File\New, ale ako to teraz v…
msx. 18.03.2006 21:44
msx.
omg jednoduchy program :)
majklx 18.03.2006 22:53
majklx
Čo tým chcš povedať? Nie v tomto programe som hľadal chybu, ale v druhom. Tento vznikol pre účely ob…
msx. 18.03.2006 23:14
msx.
ale nic... len ze pre profikov je to jednoduchy priklad a pre lamy (ja) zlozity :-D
majklx 18.03.2006 23:20
majklx
Aha, tak chápem.:-) poslední
msx. 19.03.2006 00:57
msx.

Nevim, jak ty, ale ja dostanu tohle:

Exception class: EConvertError
Exception address: 00408336
--------------------------------------------------------------------
Stack list, generated 17.3.2006 7:18:40
[00408331] SysUtils.ConvertErrorFmt + $19
[00408A58] SysUtils.StrToInt + $2C
[00464D77] Unit1.TForm1.ulozhodnotu (Line 31, "Unit1.pas" + 1) + $11
[00464DA0] Unit1.TForm1.FormActivate (Line 38, "Unit1.pas" + 0) + $0
[00435887] Forms.TCustomForm.Activate + $27
[004364EC] Forms.TCustomForm.CMActivate + $10
[00449DCC] Controls.TControl.WndProc + $188
[0044CCD7] Controls.TWinControl.WndProc + $157

a souhlasi presne i cislo radku
Predpokladam, ze jsi Exception dialog v projektu dal uplne na prvni misto v seznamu pouzitych unit...

Práveže nie, ja tam JCL ešte nemám. Ešte sa to len chystám začať používať, tak som chcel, aby ste vyskúšali, čo to robí v tomto prípade. Vyskúšam to teda aj ja. Dúfam, že budem vedieť ako na to, lebo som ešte nemal čas ani sa na to poriadne pozrieť, zatiaľ ďakujem.:-) VYzerá to tak,ž e to nájde naozaj chybu tam, kde naozaj je. To len degugger pri normálnom spustení programu (bez JCL) vyhlási chybu v poslednom riadku FormActivate.

Zpět do poradny Odpovědět na původní otázku Nahoru