source: trunk/Forms/FormCallStack.pas

Last change on this file was 13, checked in by chronos, 3 weeks ago
  • Added: Call stack window.
  • Modified: Use reload pending boolean variable and reload from timer instead of Thread.Synchronize to not delay CPU execution.
File size: 1.5 KB
Line 
1unit FormCallStack;
2
3interface
4
5uses
6 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls,
7 Debugger, Disassembler;
8
9type
10
11 { TFormCallStack }
12
13 TFormCallStack = class(TForm)
14 ListView1: TListView;
15 Timer1: TTimer;
16 procedure FormShow(Sender: TObject);
17 procedure ListView1Data(Sender: TObject; Item: TListItem);
18 procedure Timer1Timer(Sender: TObject);
19 private
20 FReloadPending: Boolean;
21 public
22 Debugger: TDebugger;
23 Disassembler: TDisassembler;
24 procedure ReloadList;
25 procedure Reload;
26 end;
27
28var
29 FormCallStack: TFormCallStack;
30
31
32implementation
33
34{$R *.lfm}
35
36{ TFormCallStack }
37
38procedure TFormCallStack.FormShow(Sender: TObject);
39begin
40 ReloadList;
41end;
42
43procedure TFormCallStack.ListView1Data(Sender: TObject; Item: TListItem);
44begin
45 if Item.Index < Debugger.CallStack.Count then
46 with Debugger.CallStack[Debugger.CallStack.Count - 1 - Item.Index] do begin
47 Item.Caption := IntToStr(Item.Index + 1);
48 Item.Data := Debugger.CallStack[Item.Index];
49 Item.SubItems.Add(IntToHex(Address, 4));
50 Item.SubItems.Add(IntToHex(Value, 4));
51 Item.SubItems.Add(Comment);
52 end;
53end;
54
55procedure TFormCallStack.Timer1Timer(Sender: TObject);
56begin
57 if FReloadPending then begin
58 FReloadPending := False;
59 ReloadList;
60 end;
61end;
62
63procedure TFormCallStack.ReloadList;
64begin
65 ListView1.Items.Count := Debugger.CallStack.Count;
66 ListView1.Refresh;
67end;
68
69procedure TFormCallStack.Reload;
70begin
71 FReloadPending := True;
72end;
73
74end.
75
Note: See TracBrowser for help on using the repository browser.