In an open script, click the Debug Script button (or select Edit > Debug Script) to show the script in the JSL Debugger window. You can also use a keyboard shortcut:
Once the JSL Debugger appears, you can continue in this mode, or you can click the Profile JSL Script button to move into the JSL Profiler mode. The JSL Profiler helps with optimization. You can profile your scripts during execution to see how much time is spent executing particular lines or how many times a particular line is executed.
Tip: To debug a script automatically when you open it, include Run JSL(1) in the Open() statement:
The Debugger opens in a new instance of JMP (The Debugger Window). The original instance is inoperable until the script produces something that requires interaction. At that point, the Debugger window becomes inoperable until you perform whatever action is required. Then control is returned to the Debugger. Close the Debugger to work again in the original instance of JMP.
The Debugger Window
Add, edit, delete, and disable or enable breakpoints. See Work with Breakpoints. You can also double-click a row on the Breakpoints tab to move the cursor to the specified line.
A breakpoint interrupts the execution of a script. Although you can step through a script line by line, this can be tedious and lengthy for a long or complex script. You can set breakpoints at places of interest and simply run the script in the Debugger. The script is run normally until a breakpoint is reached. At the breakpoint, the Debugger stops executing the script so you can look at the values of variables or start stepping line by line.
Tip: Turn on line numbers by right-clicking in the script and selecting Show Line Numbers. You can also show line numbers by default in all scripts by modifying the Script Editor preferences.
Suppose that a calculation in your script is incorrect, and you suspect the problem occurs when i==19. Set a conditional breakpoint for i==18. The Debugger will run until that condition is met, then you can step through the code to identify the problem.
2.
On the Condition tab, select Condition and enter the conditional expression.
4.
Right-clicking the breakpoint and selecting Edit Breakpoint provides a quick way to manage breakpoint behavior. Alternatively, select the breakpoint on the Breakpoints tab and click . Both methods display the Breakpoint Information window, where you customize settings on the Hit Count and Action tabs.
When you right-click and select Run To Cursor, all expressions before the location of the cursor are executed. Select this option when you only want to see values up to the current line. To see values when each expression is executed, use the stepping options.
You can also assign the variables whatever value you want. For example, if you are stepping through a For() loop but are interested only in what happens starting with a particular iteration, you can assign your iterating variable that value. Step through the first part of the loop that initializes the iteration variable and then assign it the value that you want in the variable list at the bottom. Then when you step through, the loop begins executing at that point.
In the Debugger, right-click the line that you want to watch, select Add Watch, and then enter the variable name in the window.
Breaks when the script executes the Throw() function. For example, Throw() might be enclosed in a Try() expression. The Debugger breaks on Throw() instead of continuing through the rest of the expression. This lets you identify where the problem occurred in the script and then return to debugging.
Shows a warning when you enter a breakpoint condition that contains the assignment. For example, if you have a breakpoint on x = 1 and add the condition x = 1 to the breakpoint, you are prompted to verify the assignment of x.
These settings are stored in a file named JMP.jdeb, the location of which is defined in the USER_APPDATA variable:
Windows 7: "/C:/Users/<username>/AppData/Roaming/SAS/JMP/<version number>/"
Macintosh: "/Users/<username>/Library/Application Support/JMP/<version number>/"
Note: On Windows, the paths differ based on the JMP edition. In JMP Pro, the path refers to “JMPPro”. In JMP Shrinkwrap, the path refers to “JMPSW”.
Tip: Make sure that Show Line Numbers is selected on the Debugger Options tab before proceeding.
1.
Open the string.jsl sample script and click the Debug Script button.
Set the Breakpoint
3.
Click Run.
stringFunction is defined as a function.
str is defined as an empty string.
Both variables and their types and values have been added to the Globals list. In addition, the For() loop has been evaluated up to the line with the breakpoint, shown in Set the Breakpoint.
i has been assigned to 0.
i and its value and type have been added to the Globals list.
i has been determined to be less than or equal to 9.
stringFunction() has not yet been called.
View the Initial Global Variables
4.
Click Run again.
stringFunction() is called, evaluated, and returns to the loop.
i is incremented and determined to be less than or equal to 9.
In the Globals list, i is now 1 and str is now “0”.
Global Variables at First Breakpoint
5.
Click Run again.
stringFunction() is called, evaluated, and returns to the loop.
i is incremented and determined to be less than or equal to 9.
In the Globals list, i is now 2, and str is now “01”.
Global Variables at Second Breakpoint
You can continue to click Run and watch i and str change with each iteration of the loop. Or, click Run without breakpoints to complete running the script and exit the Debugger.
Step Into, Step Over, and Step Out offer flexibility when your script contains expressions, functions, or includes other JSL files.
1.
Open the scriptDriver.jsl sample script and click the Debug Script button.
3.
Click Step Over.
4.
Click Step Over again.
5.
Click Step Over again.
6.
Click Step Over.
7.
Continue clicking Step Over until the expression ends.
8.
Click Step Over to run the function without stepping into it. The Debugger runs the entire function, and returns to the line following the function call.
9.
Click Step Into.
10.
Click Step Over.
11.
Click Step Out.
1.
Open the scoping.jsl sample script and click the Debug Script button.
2.
Click Step Over.
The fourth line turns off Names Default To Here. If you run this script again in the same JMP session, this line resets the scoping so that the first variable that is created is in the global scope.
3.
Click Step Over.
A global variable named x is created. On the Globals tab, x has been added to the list, showing its value as 5 and its type as number.
4.
Select the Locals tab, and then select Global from the list of scopes.
The global variable x is also shown here.
5.
Click Step Over twice.
Names Default To Here is turned on, which places the rest of the script into a Here scope. Then a new variable x is created in that scope.
6.
Select Here from the list on the Locals tab.
The local x is listed under Here, with its value and type.
7.
Click Step Over.
A Local Here scope is created. A second Here scope is shown in the Locals list.
8.
Click Step Over.
A new x variable is created in this Here scope. On the Locals tab, select each of the three scopes from the list (Here, Here, and Global) to see three different x variables.
9.
Click Step Over.
Look in the Debugger’s log to see the output. Notice that here:x scopes to the local here, not the script window’s here.
10.
Click Step Over.
11.
Click Step Over.
12.
Click Step Over and look at the log.
13.
Click Step Over to exit the Debugger.
1.
Open the interactive.jsl sample script and click the Debug Script button.
2.
Click Step Over twice.
The New Window expression is evaluated, and a modal window waiting for input is created. You might need to move the Debugger window to see the new modal window.
4.
Click Step Over three times and look at the log in the Debugger.
5.
Click Step Into to exit the Debugger.
1.
Open the string.jsl sample script.
2.
Click the Debug Script button .
3.
Click the Profile JSL Script button .
Initial JSL Profiler Window
4.
Click the Run button to start profiling.
Profiled Script Window
In the left margin, the selected statistics are displayed. Percent of time is displayed by default. Click the Show Profile by Count button to switch to percent of statement counts instead. The left margin is color-coded to allow for quick identification of problematic performance areas.