AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eingaben mitloggen

Ein Thema von matashen · begonnen am 18. Okt 2017 · letzter Beitrag vom 18. Okt 2017
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Eingaben mitloggen

  Alt 18. Okt 2017, 10:20
Hallo zusammen,

ich hab momentan einen nicht nachvollziehbaren Fehler bei einer meiner Programme. Ich geh davon aus das der/die Benutzer einen Arbeitsablauf verwenden den ich nicht getestet habe und der zu einem Datenfehler führt.

Um das einzugrenzen möchte ich gern mitloggen welcher Button gedrückt bzw welche Eingabe gemacht wurde.

gibt es eine einfache Methode das mit zu loggen?

Ich hab jetzt eine Stunde rum gesucht und nichts passendes gefunden, meine aber hier in der DP schon mal ein Debug-logging gesehen zu haben das über die ganze Anwendung hinweg Eingaben erfasst.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Eingaben mitloggen

  Alt 18. Okt 2017, 11:11
Die Komponente Eurekalog wäre hier sicherlich ein Ansatz. Das Log gibt dir genau den Ablauf aus mit Zeilenangabe, wo das Programm hingesprungen ist und wo die Exception aufgetreten ist. Dazu kannst Du Dir auch einen Screenshot erstellen lassen zu der Zeit, wo die Exception auftritt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Eingaben mitloggen

  Alt 18. Okt 2017, 11:15
Kannst du den Benutzer dazu bringen ein externes Programm zu starten und das daraus resultierende Log mitzuschicken?
Seit Windows 7 gibt es die "Problemaufzeichnung" (später "Schrittaufzeichnung").
Hiermit kannst du später nachvollziehen, was in deinen Programm geklickt wurde:
https://www.pcwelt.de/tipps/Mit-der-...-10096546.html
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eingaben mitloggen

  Alt 18. Okt 2017, 11:47
Das hier würde ich mir auch mal ansehen ...

Rollo
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#5

AW: Eingaben mitloggen

  Alt 18. Okt 2017, 14:28
ich würde als erste JV empfehlen
(...jcl git\jcl\experts\repository\ExceptionDialog\Standar dDialogs\ExceptDlg.pas)
wenn der in projekt eingebunden ist, meldet der den Fehler und Aufrufstack.
du solltest aber dann Projekt-> JCL Debug Expert -> Generate und Insert aktivieren und -> .Map Datei löschen aktivieren,
Bzw dann auch testen einmal ob eine Exception angezeigt wird und der richtige Stack.

Der Aufrufstack sollte eigendlich zu 99% der Fehler führen.

Aber du kannst auch einfach eine Protokollierung der Controls für deine Anwendung erstellen.
Delphi-Quellcode:
type
  TForm2 = class(TForm)
    tmr1: TTimer;
    mmo1: TMemo;
    edt1: TEdit;
    btn1: TButton;
    procedure tmr1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FLastForm:TForm;
    FLastControl:TControl;
  protected
    procedure WndProc(var Message: TMessage); override;

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses Unit3;

procedure TForm2.FormShow(Sender: TObject);
begin
  Form3.show;
end;



procedure TForm2.tmr1Timer(Sender: TObject);
var CurForm:TForm;
    CurControl:TControl;
begin
  if tmr1.Tag<>0 then exit;
  tmr1.Tag:=1;

  //logging über Screen...

  CurForm:=Screen.ActiveForm;
  CurControl:=Screen.ActiveControl;

  if CurForm<>FLastForm then
  begin
    mmo1.Lines.Add(CurForm.ToString()+'.'+CurForm.Name);
    FLastForm:=CurForm;
  end;
  if CurControl<>FLastControl then
  begin
    mmo1.Lines.Add(CurControl.ToString()+'.'+CurControl.Name);
    FLastControl:=CurControl;
    if CurControl is TButton then
    begin
      //noch irgendwas ?
    end;
  end;


  tmr1.Tag:=0;
end;

procedure TForm2.WndProc(var Message: TMessage);
var
  MausPos: TPoint;
  control: TControl;
begin
  //logging über die Messages...
  //aus http://www.delphipraxis.net/45239-wndproc-funktioniert-nicht-mit-buttons-auf-formular.html
  If (Message.Msg = WM_LBUTTONDOWN) or
     ((Message.Msg = WM_PARENTNOTIFY)
     and (Message.wParam = WM_LBUTTONDOWN)) then begin
    GetCursorPos(MausPos);
    MausPos := ScreenToClient(MausPos);
    control := self.ControlAtPos(MausPos, false, true);
    //oder
    control := screen.ActiveControl;

    if control = nil then
      mmo1.Lines.Add('WndProc: WM_LBUTTONDOWN --- nil ---')
    else
      mmo1.Lines.Add('WndProc: WM_LBUTTONDOWN --- '+control.name+' ---')
  end;
  inherited WndProc(Message);
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz