in trace-recorder/src/main/org/jetbrains/lincheck/trace/recorder/TraceRecorder.kt [52:87]
fun installAndStartTrace(
className: String,
methodName: String,
traceFileName: String?,
format: String?,
formatOption: String?,
pack: Boolean,
startingCodeLocationId: Int,
context: TraceContext
) {
val startedCount = installCount.incrementAndGet()
Logger.info { "Trace recorder has been started from $className::$methodName in thread \"${Thread.currentThread().name}\" (installCount=$startedCount)" }
if (startedCount > 1) return
// Set a signal "void" object from Injections for better text output
INJECTIONS_VOID_OBJECT = Injections.VOID_RESULT
// this method does not need 'runInsideIgnoredSection' because analysis is not enabled until its completion
eventTracker = TraceCollectingEventTracker(
className = className,
methodName = methodName,
traceDumpPath = traceFileName,
mode = parseOutputMode(format, formatOption),
packTrace = pack,
context = context,
)
traceStarterThread = Thread.currentThread()
val descriptor = ThreadDescriptor.getCurrentThreadDescriptor()
?: Injections.registerCurrentThread(eventTracker)
Injections.enableGlobalEventTracking(eventTracker)
eventTracker!!.enableTrace(startingCodeLocationId)
descriptor.enableAnalysis()
}