5.3.2 The backtrace logging facility

5.3.2.2 Dynamic closures and the backtrace logging facility

When you invoke the function start-backtrace-logging, you specify a file for collecting the results of the trace. These results are stored as raw binary data, not as text, since converting the data to text would cause a slowdown in program execution that could invalidate the trace.

One of the consequences of writing the backtrace logging data to a file is that certain objects, especially dynamic closures, can move in the Lisp image before the file is read in again. In other words, these objects might be copied or discarded by the Garbage Collector after the file is written.

The following objects fall into this category:

Dynamic closures are functions for which storage was created in the dynamic or ephemeral areas. Because these objects might have moved between the time the data file was written and read, the backtrace logging code cannot attach a name to these objects. However, the code for the nearest named function above the closure in the call tree generally identifies the object. In the backtrace logging summary, dynamic closures have the printed representation #<Dynamic Closure>.

Nonexistent objects are those that existed in the image in which the trace was performed but that are not present in the image in which the log information is summarized. If your summary contains many of these objects, the current image might differ too greatly from the logging image for the data that were collected to provide useful information. These objects have the printed representation #<Unknown Object> in the summary.

Occasionally the trace might contain unnamed procedures. The summary shows these objects with the printed representation #<Unnamed Procedure>.

The following examples show how such objects might appear in the backtrace logging summary:

	4: LIQUID::CRC-8BIT-LONG 2.273 
	4: LIQUID::CRC-8BIT 9.091 
	2: #<Dynamic Closure> 11.273 
...
 
 8 - LIQUID-RUNTIME-SUPPORT:SET-GETHASH 	8.655 
 9 - #<Unknown Object> 	4.731 
10 - LIQUID::CHECK-STRING-ARGS-RUNTIME 	2.273 
... 

For the purposes of the backtrace logging analysis code, all objects of type #<Dynamic Closure> are grouped together. Thus, when the procedures are ordered by exclusive time in the summary, all of the dynamic closures appear as if they were a single function.


Liquid Common Lisp 5.0 Release and Installation Notes - 9 JUN 1997

Generated with Harlequin WebMaker