DEADSOFTWARE

game should write stack trace on exceptions now
[d2df-sdl.git] / src / game / Doom2DF.dpr
index 1341a798d0a8d27cfef71b5705bbef7387a42a61..a47b72d1db22465bab5092fbcc08ba1400e3a82b 100644 (file)
@@ -59,8 +59,6 @@ uses
   sfsPlainFS in '../sfs/sfsPlainFS.pas',
   sfsZipFS in '../sfs/sfsZipFS.pas',
   wadreader in '../shared/wadreader.pas',
-  MAPSTRUCT in '../shared/MAPSTRUCT.pas',
-  MAPREADER in '../shared/MAPREADER.pas',
   MAPDEF in '../shared/MAPDEF.pas',
   CONFIG in '../shared/CONFIG.pas',
   g_basic in 'g_basic.pas',
@@ -71,7 +69,6 @@ uses
   g_netmaster in 'g_netmaster.pas',
   g_res_downloader in 'g_res_downloader.pas',
   g_grid in 'g_grid.pas',
-  z_aabbtree in 'z_aabbtree.pas',
   g_game in 'g_game.pas',
   g_gfx in 'g_gfx.pas',
   g_gui in 'g_gui.pas',
@@ -90,6 +87,7 @@ uses
   g_triggers in 'g_triggers.pas',
   g_weapons in 'g_weapons.pas',
   g_window in 'g_window.pas',
+  g_holmes in 'g_holmes.pas',
   SysUtils,
 {$IFDEF USE_FMOD}
   fmod in '../lib/FMOD/fmod.pas',
@@ -100,6 +98,9 @@ uses
   xprofiler in '../shared/xprofiler.pas',
   binheap in '../shared/binheap.pas',
   hashtable in '../shared/hashtable.pas',
+  idpool in '../shared/idpool.pas',
+  xparser in '../shared/xparser.pas',
+  xdynrec in '../shared/xdynrec.pas',
   BinEditor in '../shared/BinEditor.pas',
   envvars in '../shared/envvars.pas',
   g_panel in 'g_panel.pas',
@@ -116,22 +117,40 @@ uses
 var
   f: Integer;
   noct: Boolean = false;
+  tfo: Text;
 begin
   for f := 1 to ParamCount do
   begin
          if ParamStr(f) = '--gdb' then noct := true
-    else if ParamStr(f) = '--log' then conbufDumpToStdOut := true;
+    else if ParamStr(f) = '--log' then conbufDumpToStdOut := true
+    else if ParamStr(f) = '--safe-log' then e_SetSafeSlowLog(true);
   end;
   if noct then
+  begin
     Main()
+  end
   else
+  begin
     try
       Main();
       e_WriteLog('Shutdown with no errors.', MSG_NOTIFY);
     except
-      on E: Exception do
-        e_WriteLog(Format(_lc[I_SYSTEM_ERROR_MSG], [E.Message]), MSG_FATALERROR);
+      on e: Exception do
+        begin
+          e_WriteStackTrace(e.message);
+          //e_WriteLog(Format(_lc[I_SYSTEM_ERROR_MSG], [E.Message]), MSG_FATALERROR);
+          AssignFile(tfo, GameDir+'/trace.log');
+          {$I-}
+          Append(tfo);
+          if (IOResult <> 0) then Rewrite(tfo);
+          if (IOResult = 0) then begin writeln(tfo, '====================='); DumpExceptionBackTrace(tfo); CloseFile(tfo); end;
+        end
       else
-        e_WriteLog(Format(_lc[I_SYSTEM_ERROR_UNKNOWN], [NativeUInt(ExceptAddr())]), MSG_FATALERROR);
+        begin
+          //e_WriteLog(Format(_lc[I_SYSTEM_ERROR_UNKNOWN], [NativeUInt(ExceptAddr())]), MSG_FATALERROR);
+          e_WriteStackTrace('FATAL ERROR');
+        end;
     end;
+  end;
+  e_DeinitLog();
 end.