| 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 + "."); |
| } |
| } |
| } |