fun installAndStartTrace()

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()
    }