Browse Source

pas2js: -vd writes stacktrace

git-svn-id: trunk@39505 -
Mattias Gaertner 7 years ago
parent
commit
fc49471729

+ 1 - 0
packages/fcl-passrc/src/pasresolver.pp

@@ -14654,6 +14654,7 @@ begin
   writeln('TPasResolver.Destroy PopScope...');
   {$ENDIF}
   PopScope; // free default scope
+  raise EInvalidArgument.Create('AAA1');
   {$IFDEF VerbosePasResolverMem}
   writeln('TPasResolver.Destroy FPendingForwards...');
   {$ENDIF}

+ 48 - 21
packages/pastojs/src/pas2jscompiler.pp

@@ -1121,6 +1121,8 @@ end;
 
 procedure TPas2jsCompilerFile.HandleException(E: Exception);
 begin
+  if ShowDebug then
+    Log.LogExceptionBackTrace;
   if E is EScannerError then
   begin
     Log.Log(Scanner.LastMsgType,Scanner.LastMsg,Scanner.LastMsgNumber,
@@ -2360,6 +2362,8 @@ begin
       aJSWriter.WriteJS(aFile.JSModule);
     except
       on E: Exception do begin
+        if ShowDebug then
+          Log.LogExceptionBackTrace;
         Log.LogPlain('[20180204193420] Error while creating JavaScript "'+FileCache.FormatPath(DestFilename)+'": '+E.Message);
         Terminate(ExitCodeErrorInternal);
       end;
@@ -2432,6 +2436,8 @@ begin
         end;
       except
         on E: Exception do begin
+          if ShowDebug then
+            Log.LogExceptionBackTrace;
           if E.Message<>SafeFormat(SFCreateError,[DestFileName]) then
             Log.LogPlain('Error: '+E.Message);
           Log.LogMsg(nUnableToWriteFile,[QuoteStr(FileCache.FormatPath(DestFilename))]);
@@ -2457,6 +2463,8 @@ begin
           end;
         except
           on E: Exception do begin
+            if ShowDebug then
+              Log.LogExceptionBackTrace;
             if E.Message<>SafeFormat(SFCreateError,[DestFileName]) then
               Log.LogPlain('Error: '+E.Message);
             Log.LogMsg(nUnableToWriteFile,[QuoteStr(FileCache.FormatPath(MapFilename))]);
@@ -3688,8 +3696,6 @@ begin
   FDirectoryCache:=FFileCache.DirectoryCache;
   FLog.OnFormatPath:[email protected];
 
-  FDirectoryCache.GetDirectory('/home/mattias/pascal/mypas2js/examples/',true,false).CheckConsistency;
-
   FDefines:=TStringList.Create;
   // Done by Reset: TStringList(FDefines).Sorted:=True;
   // Done by Reset: TStringList(FDefines).Duplicates:=dupError;
@@ -3709,28 +3715,43 @@ begin
 end;
 
 destructor TPas2jsCompiler.Destroy;
-begin
-  FreeAndNil(FPrecompileInitialFlags);
-  FreeAndNil(FWPOAnalyzer);
 
-  FMainFile:=nil;
-  FreeAndNil(FUnits);
-  FreeAndNil(FReadingModules);
-  FFiles.FreeAndClear;
-  FreeAndNil(FFiles);
+  procedure FreeStuff;
+  begin
+    FreeAndNil(FPrecompileInitialFlags);
+    FreeAndNil(FWPOAnalyzer);
+
+    FMainFile:=nil;
+    FreeAndNil(FUnits);
+    FreeAndNil(FReadingModules);
+    FFiles.FreeAndClear;
+    FreeAndNil(FFiles);
+
+    ClearDefines;
+    FreeAndNil(FDefines);
+    FreeAndNil(FConditionEval);
+
+    FLog.OnFormatPath:=nil;
+    if FFileCacheAutoFree then
+      FreeAndNil(FFileCache)
+    else
+      FFileCache:=nil;
+    FDirectoryCache:=nil;
 
-  ClearDefines;
-  FreeAndNil(FDefines);
-  FreeAndNil(FConditionEval);
+    FreeAndNil(FParamMacros);
+  end;
 
-  FLog.OnFormatPath:=nil;
-  if FFileCacheAutoFree then
-    FreeAndNil(FFileCache)
+begin
+  if ShowDebug then
+    try
+      FreeStuff;
+    except
+      on E: Exception do
+        Log.LogExceptionBackTrace;
+    end
   else
-    FFileCache:=nil;
-  FDirectoryCache:=nil;
+    FreeStuff;
 
-  FreeAndNil(FParamMacros);
   FreeAndNil(FLog);
   inherited Destroy;
 end;
@@ -3907,7 +3928,13 @@ begin
   try
     Compile(StartTime);
   except
-    on E: ECompilerTerminate do ;
+    on E: ECompilerTerminate do
+    begin
+    end else begin
+      if ShowDebug then
+        Log.LogExceptionBackTrace;
+      raise;
+    end;
   end;
 end;
 
@@ -4106,7 +4133,7 @@ begin
   if FHasShownLogo then exit;
   FHasShownLogo:=true;
   WriteVersionLine;
-  Log.LogPlain('Copyright (c) 2018 Free Pascal Team');
+  Log.LogPlain('Copyright (c) 2018 Mattias Gaertner and others');
   if coShowInfos in Options then
     WriteEncoding;
 end;

+ 16 - 0
packages/pastojs/src/pas2jslogger.pp

@@ -106,6 +106,7 @@ type
       const Filename: string = ''; Line: integer = 0; Col: integer = 0;
       UseFilter: boolean = true);
     procedure LogMsgIgnoreFilter(MsgNumber: integer; Args: array of const);
+    procedure LogExceptionBackTrace;
     function MsgTypeToStr(MsgType: TMessageType): string;
     function GetMsgText(MsgNumber: integer; Args: array of const): string;
     function FormatMsg(MsgType: TMessageType; Msg: string; MsgNumber: integer = 0;
@@ -793,6 +794,21 @@ begin
   LogMsg(MsgNumber,Args,'',0,0,false);
 end;
 
+procedure TPas2jsLogger.LogExceptionBackTrace;
+var
+  lErrorAddr: CodePointer;
+  FrameCount: LongInt;
+  Frames: PCodePointer;
+  FrameNumber: Integer;
+begin
+  lErrorAddr:=ExceptAddr;
+  FrameCount:=ExceptFrameCount;
+  Frames:=ExceptFrames;
+  Log(mtDebug,BackTraceStrFunc(lErrorAddr));
+  for FrameNumber := 0 to FrameCount-1 do
+    Log(mtDebug,BackTraceStrFunc(Frames[FrameNumber]));
+end;
+
 function TPas2jsLogger.MsgTypeToStr(MsgType: TMessageType): string;
 begin
   case MsgType of