Debugging
XS supports debug expressions (breakpoints), and statement debugging.
Debug expressions are used to set breakpoints directly into your scripts. They can be used to conditionally or unconditionally debug your code. You can also enable statement debugging in the XS configuration to enable statement debugging. In this case, the debugger will be called for every statement in the script.
Breakpoints
debug(expression); // Conditional debug breakpoint
debug(); // Unconditional debug breakpoint
Example Usage 1
This example sets up the debugger to break on every debug()
call in the script.
Debug Breakpoint Calls
var x = 42;
debug(x == 42); // Conditional debug breakpoint
debug(); // Unconditional debug breakpoint
XsDebugger
Setup
var debugger = new XsDebugger()
{
BreakMode = BreakMode.Call, // DEBUG ON `debug()` CALLS
Handler = x =>
{
Console.WriteLine($"Debugging at Line: {x.Line}, Column: {x.Column} - {x.SourceLine}");
foreach (var kvp in x.Variables)
{
Console.WriteLine($"Variable {kvp.Key} = {kvp.Value}");
}
}
};
var expression = Xs.Parse( script, debugger );
var lambda = Expression.Lambda<Func<int>>( expression );
var compiled = lambda.Compile();
var result = compiled();
Example Usage 2
This example sets up the debugger to break on every statement in the script.
Debug Statement Stepping
var results = new List<int>(5);
var c = 0;
if (1 + 1 == 2)
{
c = if (true) {
42;
}
else {
0;
};
}
else
{
c = 1;
}
results.Add(c);
results;
XsDebugger
Setup
var debugger = new XsDebugger()
{
BreakMode = BreakMode.Statements, // DEBUG STATEMENTS
Handler = x =>
{
Console.WriteLine($"Debugging at Line: {x.Line}, Column: {x.Column} - {x.SourceLine}");
foreach (var kvp in x.Variables)
{
Console.WriteLine($"Variable {kvp.Key} = {kvp.Value}");
}
}
};
var expression = Xs.Parse( script, debugger );
var lambda = Expression.Lambda<Func<int>>( expression );
var compiled = lambda.Compile();
var result = compiled();