生產環境出錯時,無法像開發機那樣打斷點、觀察變數。傳統做法(修改 web.config 掛 HttpModule、部署新 DLL)會導致應用程式重啟,對高流量系統影響巨大。若能在不重啟、不部署的情況下,直接在網頁上輸入代碼並即時執行、查看結果,將大幅降低排錯門檻。
一個 .aspx 頁面,兩個 TextBox(多行模式)分別作為代碼輸入區與輸出區,一個按鈕觸發執行:
protected void btnExecute_Click(object sender, EventArgs e)
{
ScriptEngine engine = Python.CreateEngine();
var scope = engine.CreateScope();
var script = engine.CreateScriptSourceFromString(this.txtCode.Text, SourceCodeKind.Statements);
script.Execute(scope);
TextWriter writer = new StringWriter();
scope.SetVariable("logger", writer);
Action<HttpContext> trace;
if (scope.TryGetVariable<Action<HttpContext>>("trace", out trace))
{
trace(this.Context);
}
this.txtOutput.Text = writer.ToString();
}
使用者在 txtCode 輸入如 trace = lambda ctx: logger.WriteLine(ctx.Request.Url),點擊執行即見輸出。下篇將擴展為「持續採樣」模式。