diff options
Diffstat (limited to 'src/scripttools/debugging/scripts/commands/tbreak.qs')
-rw-r--r-- | src/scripttools/debugging/scripts/commands/tbreak.qs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/scripttools/debugging/scripts/commands/tbreak.qs b/src/scripttools/debugging/scripts/commands/tbreak.qs new file mode 100644 index 0000000..66a8224 --- /dev/null +++ b/src/scripttools/debugging/scripts/commands/tbreak.qs @@ -0,0 +1,59 @@ +name = "tbreak"; + +group = "breakpoints"; + +shortDescription = "Set a temporary breakpoint"; + +longDescription = "The same as the \"break\" command, except that the breakpoint is automatically deleted as soon as it is triggered."; + +seeAlso = [ "break", "ignore" ]; + +argumentTypes = [ "script-filename" ]; + +// ### merge with break.qs: only difference is the "singleShot: true" in call to scheduleSetBreakpoint() +// ### maybe an include() function so commands can share code? + +function execute() { + if (arguments.length == 0) { + message("Missing argument."); + return; + } + var arg = arguments[0]; + var colonIndex = arg.lastIndexOf(':'); + if (colonIndex == -1) { + lineNumber = parseInt(arg); + if (isNaN(lineNumber)) { + message("Breakpoint location must be of the form <file>:<line> or <line>."); + return; + } + var sid = getCurrentScriptId(); + if (sid == -1) { + message("No script."); + return; + } + scheduleGetScriptData(sid); + scriptId = sid; + state = 1; + } else { + fileName = arg.slice(0, colonIndex); + lineNumber = parseInt(arg.slice(colonIndex+1)); + // ### resolve the script to see if it's loaded or not? (e.g. so we can issue a warning) + scheduleSetBreakpoint({ fileName: fileName, lineNumber: lineNumber, singleShot: true }); + state = 2; + } +} + +function handleResponse(resp) { + if (state == 1) { + fileName = resp.result.fileName; + if (fileName.length == 0) + fileName = "<anonymous script, id=" + scriptId + ">"; + scheduleSetBreakpoint({ scriptId: scriptId, lineNumber: lineNumber, singleShot: true }); + state = 2; + } else if (state == 2) { + if (resp.error == 0) { + var id = resp.result; + message("Breakpoint " + id + ": " + fileName + ", line " + lineNumber + "."); + } + } +} |