Merhaba
http://www.madshi.net/ madexcept için buraya bakınız.
ayrıca ben jedinin bug yakalayıcısını kullanıyorum bununlada hatayı tespit edebilirsin. yada dilersen programı F9 ile çalıştır ve öyle debug et. hata verdiği yerde duracaktır.
bu tip hatalar sık karşıma çıkıyor, aylarca bulamadığım oluyor, ama inan bana hepside komik denecek dikkatsizlikler sonucu ortaya çıkıyor. umarım hatanın yerini bulabilirsin.
jedi ile hata yakalamak için şöyle yapmalısın.
ana unit içinde şunlar olmalıdır.
Kod: Tümünü seç
uses
JclDebug,
DateUtils,
SqlTimSt,
.
.
.
type
TfrmMain = class(TForm)
.
.
.
private
LastErrorFN : string;
procedure AppError(Sender: TObject; E: Exception);
.
.
.
implementation
.
.
.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
.
.
.
Application.OnException := AppError;
LastErrorFN := ExtractFilePath(Application.ExeName) + IntToStr(DateTimeToTimeStamp(Now).Date) + '-' + IntToStr(DateTimeToTimeStamp(Now).Time);
.
.
.
end;
.
.
.
procedure TfrmMain.AppError(Sender: TObject; E: Exception);
var T : TStringList;
Y : TStringList;
begin
T := TStringList.Create;
Y := TStringList.Create;
if fileExists(LastErrorFN+'.txt') then T.LoadFromFile(LastErrorFN+'.txt');
Y.Add('Hata Zamanı: ' + DateTimeToStr(Now));
Y.Add('Orjinal hata mesajı --> ' + E.Message);
Y.Add('Jedi''nin yakaladıkları;');
JclLastExceptStackListToStrings(Y, True, True, True, True);
Y.Add('');
T.AddStrings(Y); { TODO : bunu bize göndersin }
T.SaveToFile(LastErrorFN+'.txt');
T.Free;
Y.Free;
end;
.
.
.
.
initialization
// Enable raw mode (default mode uses stack frames which aren't always generated by the compiler)
Include(JclStackTrackingOptions, stRawMode);
Include(JclStackTrackingOptions, stAllModules);
Include(JclStackTrackingOptions, stStaticModuleList);
// Initialize Exception tracking
JclStartExceptionTracking;
finalization
// Uninitialize Exception tracking
JclStopExceptionTracking;
end.
ben bu şekilde çok hata ayıkladım. programı F9 ile çalıştırmadanda direk EXE sini çalıştırarak bir hata meydana geldiğinde EXE nin bulunduğu dizine log dosyası atıyor. dilersen oluşan bu hatayı bir URL ile kendinde bile toplayabilirsin..
Saygılar...