浏览代码

Report Procedure Descriptors -- useful for GC debugging

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7167 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父节点
当前提交
caf3ebde73
共有 1 个文件被更改,包括 28 次插入0 次删除
  1. 28 0
      source/Debugging.Mod

+ 28 - 0
source/Debugging.Mod

@@ -200,7 +200,35 @@ VAR
 		TRACE(Heaps.GC, "enabled"); 
 	END EnableGC;
 
+	(* useful for debugging the GC / metadata *)
+	PROCEDURE ReportProcedureDescriptors*;
+	VAR m: Modules.Module; i,j: LONGINT;
+	BEGIN
+		m := Modules.root;
+		WHILE (m # NIL) DO
+			TRACE(m.name); 
+			IF m.procTable # NIL THEN 
+				FOR i := 0 TO LEN(m.procTable)-1 DO
+					(*TRACE(m.procTable[i]);*)
+					Log.Address(m.procTable[i]); 
+					Log.String(":"); 
+					Reflection.WriteProc(Log, m.procTable[i].pcFrom); 
+					Log.String(" ptrs @ ");
+					FOR j := 0 TO LEN(m.procTable[i].offsets)-1 DO
+						Log.Int(m.procTable[i].offsets[j],1); 
+						Log.String(" "); 
+					END;
+					Log.Ln;
+				END;
+			END;
+			m := m.next;
+		END;
+	END ReportProcedureDescriptors;
+
 
 BEGIN
 	Streams.OpenWriter( DefaultLog, KernelLog.Send );  Log := DefaultLog; NEW( lock );
 END Debugging.
+
+SystemTools.FreeDownTo Debugging ~
+Debugging.ReportProcedureDescriptors