Skip to content

Debugging and Analysis

Mick edited this page Jun 30, 2026 · 8 revisions

Debugging and Analysis

Breakpoints

engine.AddBreakpoint("main.rules", 3);
engine.AddBreakpoint("main.rules", 5, "score > 80");

var session = new RuleScriptDebugSession(engine);
var runTask = session.RunFileAsync("main.rules");

var pause = await session.WaitForPauseAsync();
session.StepOver();
pause = await session.WaitForPauseAsync();
session.Continue();

var context = await runTask;

Use Stop() to cancel a running or paused debug session.

At a pause point, RuleScriptDebugSession.CurrentSnapshot exposes the current source location, global variables, function locals, and active call stack.

Static Analysis

var symbols = engine.Analyze(script);

var variables = symbols.VariableNames;
var functions = symbols.FunctionNames;
var imports = symbols.ImportAliases;
var typedVariables = symbols.Variables;
var userFunctions = symbols.UserFunctions;
var hostFunctions = symbols.HostFunctions;

Analyze does not execute the script. It returns script variables, inferred types, User Function signatures, registered Host Function signatures, built-ins, and import aliases.

For cursor-aware completion, call Analyze(script, line, column) and read VisibleVariables or VisibleVariableNames.

For incomplete editor input:

var attempt = engine.TryAnalyze(script);

if (!attempt.Success)
{
    foreach (var diagnostic in attempt.Diagnostics)
    {
        Console.WriteLine(diagnostic.Message);
    }
}

Best-effort analysis collects recoverable syntax errors while preserving partial symbols when possible.

Clone this wiki locally