framework_eng/skills/tool-usage/diagnostics/dap-bsl-code-debug-procedure/SKILL.md
Interactive DAP debugging of a single BSL procedure
npx skillsauth add steelmorgan/1c-agent-based-dev-framework dap-bsl-code-debug-procedureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill for focused interactive debugging when static analysis, the event log, screenshots, and temporary logging do not answer the actual execution path or variable values.
Before starting, the following must be known:
If the MCP debugger server is not configured, use the instructions in docs/info/mcp-bsl-debugger.md.
code-navigation or by reading the module.attach.get_targets.reload_metadata.set_breakpoints.wait_for_stop every 5 seconds.get_call_stack, if the tool is available, then get_variables.evaluate.step_in, step_out, continue.clear_breakpoints.detach.The order is always the same: breakpoint first, then scenario start, then stop-event polling in the debugger. Do not start the test or client action before the breakpoint is set, otherwise the required section may run before the debugger connects.
After the scenario starts, the agent does not determine a stop from the client "freezing". It immediately switches to the debugger MCP and calls wait_for_stop at 5-second intervals:
Use this when the code being debugged runs in a form, command, UI handler, or other client context.
v8-session-manager, get the list of active sessions and identify the test agent session: infobase_name, ib_session_number, session_id, user, test client flag.get_targets, select the target corresponding to this session. If the match is not obvious, verify the start time, user, and infobase session number.wait_for_stop every 5 seconds until a stop event or the control timeout.continue, return to the Vanessa run and wait for it to finish normally.Use this when it is easier to trigger the scenario by clicking around than by writing or running Vanessa.
v8-session-manager.session_list and match it with the debugger target.Use this when the code being debugged runs on the server, in a server-side common module, manager, object, posting, or the server part of a form.
wait_for_stop; for a fast server method the waiting limit is 30 seconds, for a heavy one - a pre-defined control limit.continue, wait for the test to finish and verify its result.Use this as a last resort when the server method cannot be conveniently called by a test, HTTP request, or an existing runner/tool.
mcp_tools, temporarily add a narrow tool that calls only the required server entry point with controlled parameters.HTTP service, scheduled job, document posting, or background job are acceptable if this is safe and reproducible. For such scenarios, record in advance which target should stop, and do not leave a stopped thread in a transaction.
Set the breakpoint not "somewhere in the procedure", but on the line that answers the current question:
If - verify the variables that affect branching;If the procedure does not stop, check:
Look only at the values that affect the current hypothesis:
Do not evaluate expressions with side effects. evaluate is allowed for reading simple expressions, but not for writing, posting, HTTP calls, changing global state, or starting business operations.
Use steps sparingly:
step_in - when you need to enter the called procedure and see its arguments/branch;step_out - when the current procedure is already clear and you need the return result;continue - when you need to reach the next breakpoint or release the thread;pause - only if you need to stop an already running target and this is safe for the session.After each step, record the observation: where execution stopped, which values changed, which hypothesis was confirmed or rejected.
Before the final answer or before handing the task over, do the following:
clear_breakpoints for all set breakpoints.continue, if the thread is still stopped and it is safe to release it.detach.detach did not work, attach returns ibInDebug, the ping cycle hung, or get_targets shows an active debug state after cleanup - run force_detach, then check get_targets again.agent-debug with the event log is cheaper.depends_on:
development
1C server maintenance webhooks: container restart and external component cache cleanup
tools
Rules for using RLM tools for project search and navigation in 1C/BSL
development
Creates web applications and routes on Winow (a web server on OneScript and Autumn). Use when working with a web server on OneScript, routing, or Winow controllers.
development
Writes and structures code in OneScript (BSL without 1C). Use when working with .os files, OneScript projects, packagedef, opm, the