Programda detaylı Hata yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Programda detaylı Hata yakalama

Mesaj gönderen adelphiforumz »

S.A.

program çalışırken oluşan hataları yakalayıp bunları bir txt dosyasına kaydetmek istiyorum
fakat Except olayındaki E.Message sadece olayın sonucunu veriyor
benim istediğim ise daha hatanın hangi fonksiyonda hangi satırda oluştuğu gibi detaylı bilgi almaya çalışıyorum

biraz araştırdığımda StackTrace üzerinden yapıldığını buldum fakat tam olarak nasıl işliyor bir türlü sonuçlandıramadım
bu forumdada moderatörler arasında bir yazışma olmuş fakat oradada yine yöntem anlatılmış

viewtopic.php?f=8&t=27091&p=152241&hili ... ce#p152241

Bulduğu bir örnek var fakat onuda çalıştıramadım

http://blog.gurock.com/postings/working ... trace/730/

Kod: Tümünü seç

unit UntStackTrace;

interface

uses
  SysUtils, Classes, JclDebug;

implementation

function GetExceptionStackInfoProc(P: PExceptionRecord): Pointer;
var
  LLines: TStringList;
  LText: String;
  LResult: PChar;
begin
    LLines := TStringList.Create;
    try
        JclLastExceptStackListToStrings(LLines, True, True, True, True);
        LText := LLines.Text;
        LResult := StrAlloc(Length(LText));
        StrCopy(LResult, PChar(LText));
        Result := LResult;
    finally
    LLines.Free;
    end;
end;

function GetStackInfoStringProc(Info: Pointer): string;
begin
    Result := string(PChar(Info));
end;

procedure CleanUpStackInfoProc(Info: Pointer);
begin
    StrDispose(PChar(Info));
end;

initialization
// Start the Jcl exception tracking and register our Exception
// stack trace provider.
    if JclStartExceptionTracking then
    begin
        Exception.GetExceptionStackInfoProc := GetExceptionStackInfoProc;
        Exception.GetStackInfoStringProc := GetStackInfoStringProc;
        Exception.CleanUpStackInfoProc := CleanUpStackInfoProc;
    end;

finalization
// Stop Jcl exception tracking and unregister our provider.
    if JclExceptionTrackingActive then
    begin
        Exception.GetExceptionStackInfoProc := nil;
        Exception.GetStackInfoStringProc := nil;
        Exception.CleanUpStackInfoProc := nil;
        JclStopExceptionTracking;
    end;
end.

Kod: Tümünü seç

uses
…, StackTrace;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure SomeMethod;
end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
try
SomeMethod;
except
// Log the exception: We use SmartInspect here because it has
// built-in support for Exception.StackTrace but you could also
// access the StackTrace property here directly.
SiMain.LogException;
end;
end;

procedure TForm1.SomeMethod;
begin
raise Exception.Create(‘A test exception’);
end;
Bu sornu nasıl çözebilirim
Teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Programda detaylı Hata yakalama

Mesaj gönderen mrmarman »

Projeniz içerisinde hataya meyilli kısımlar sık değildir. Bilmeden söylüyorum ama öyle her yerde kontrola muhtaç kısım olacağı konusu çok olacağını sanmıyorum.

- Kendi kod akışınızdan ziyade kullanıcı, timer, network üzerinden vb. akış yönünü/düzenini etkileyecek yan unsurların olduğu yerin başına sonuna try/except satırları ekleyip, bu except'leri loglarsanız amacınıza ulaşırsınız diye değerlendiriyorum.

- Biraz önce bir başka forum üyesinin mesajı da buna benzer bir kaygıyı taşıyordu, kendisine özel olarak kodlama hatalarından dolayı oluşan memory şişmesi vb. olayları takip için bir metod araştırıyordu. Ona da benzer cevabı verdim. Problemi doğmadan önce öngörebilmek, sonrasında engellemek veya problemi runtime takip etmekten daha kolay ve verimlidir.
Resim
Resim ....Resim
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Programda detaylı Hata yakalama

Mesaj gönderen adelphiforumz »

programın genelinde bir hata oluştuğunda bu hatanın nereden kaynaklandığını bulmaya çalışıcam
program bayağı bir zaman önce yapılmış ve yapanlar yok
120 nin üzerinde ekran var çoğu yerdede exception kontrolü konulmamış

bu yüzden böyle bir arayışa girdim en azından program müşteride patladığında
programın nerede patladığını bulmaya çalışıcam ve bunları loglayıp arka tarafta bana mail atacak bir yapı kurmaya çalışıyorum

Teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Programda detaylı Hata yakalama

Mesaj gönderen thelvaci »

Uygulaması, yazması kolay bir yol arıyorsanız; EurekaLog yada madExcept gibi ürünleri kullanabilirsiniz. Ben bir şeyler yapıp, öğreneyim uğraşmak sorun değil diyorsanız;

StackWalk64 API'sine bakabilirsiniz.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Programda detaylı Hata yakalama

Mesaj gönderen adelphiforumz »

Teşekkürler tuğrul hocam
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Cevapla