ソースを参照

Merged revisions 1427 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

r1427 (yury)
* prevent endless stack dump if an exception occured during the dump itself.

git-svn-id: branches/fixes_2_0@1431 -

peter 20 年 前
コミット
9352dc266d
1 ファイル変更21 行追加17 行削除
  1. 21 17
      rtl/inc/system.inc

+ 21 - 17
rtl/inc/system.inc

@@ -741,23 +741,27 @@ var
   caller_frame,
   caller_addr : Pointer;
 Begin
-  prevbp:=bp-1;
-  i:=0;
-  is_dev:=do_isdevice(textrec(f).Handle);
-  while bp > prevbp Do
-   Begin
-     caller_addr := get_caller_addr(bp);
-     caller_frame := get_caller_frame(bp);
-     if (caller_addr=nil) or
-        (caller_frame=nil) then
-       break;
-     Writeln(f,BackTraceStrFunc(caller_addr));
-     Inc(i);
-     If ((i>max_frame_dump) and is_dev) or (i>256) Then
-       break;
-     prevbp:=bp;
-     bp:=caller_frame;
-   End;
+  try
+    prevbp:=bp-1;
+    i:=0;
+    is_dev:=do_isdevice(textrec(f).Handle);
+    while bp > prevbp Do
+     Begin
+       caller_addr := get_caller_addr(bp);
+       caller_frame := get_caller_frame(bp);
+       if (caller_addr=nil) or
+          (caller_frame=nil) then
+         break;
+       Writeln(f,BackTraceStrFunc(caller_addr));
+       Inc(i);
+       If ((i>max_frame_dump) and is_dev) or (i>256) Then
+         break;
+       prevbp:=bp;
+       bp:=caller_frame;
+     End;
+   except
+     { prevent endless dump if an exception occured }
+   end;
 End;