IP Library Granted Patent US 8,286,142
Granted Patent B2
US 8,286,142 · App. 13/333,993 · Granted Oct 9, 2012

Method and system for providing a visual debugger for an interpreted statistical language

Assignee: Tibco Software Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,286,142
App. No.
13/333,993
Filed
Dec 21, 2011
Granted
Oct 9, 2012
Kind
B2
Art Unit
2191
USPC
717/129
Abstract

Methods and systems for visual debugging of an interpreted language in, for example, an Interactive Development Environment are provide. Example embodiments provide an S-PLUS Visual Debugging System (“SPVDS”), which includes an S-PLUS Workbench Debugger (“SPWD”) that provides “step-based” visual debugging, enabling programmers to step through execution of expressions by setting and otherwise managing breakpoints, examining variables and expressions, and controlling execution such as by step, step-in, step-out, step-over, continue, stop commands. In addition, the SPWD provides a profiler which tracks the number and duration of calls to functions and the amount of memory allocated to variables. This abstract is provided to comply with rules requiring an abstract, and it is submitted with the intention that it will not be used to interpret or limit the scope or meaning of the claims.

Claims (48)

1. A method in a computing system for debugging interpreted code in a visual debugger using breakpoints to facilitate step-based evaluation of expressions, comprising:

presenting a visual user interface for receiving debugging commands;

in response to a received debug command to set or change an indicated breakpoint in a segment of code that is expressed in an interpreted programming language and that defines one or more expressions,

determining the nearest enclosing expression to the indicated breakpoint, including when the nearest enclosing expression begins on a line of source code associated with the code segment that is different from a line of the associated source code that contains the indicated breakpoint; and

generating a breakpoint address that indicates a location in the segment of code that corresponds to the beginning of the determined enclosing expression when the code segment is evaluated;

causing the code segment to be evaluated using an interpreter for the interpreted programming language, such that evaluation automatically stops when the location in the code segment that corresponds to the breakpoint address is encountered;

causing one or more source code statements that correspond to and indicate the location in the code segment where the evaluation stopped to be displayed in the visual interface; and

receiving one or more additional debug commands to further control the evaluation of the code segment or to examine aspects of the code segment under evaluation.

2. The method of claim 1 wherein the received debug command to set or change the indicated breakpoint is indicated by selection of a portion of a line in source code associated with the code segment and wherein the determining the nearest enclosing expression to the indicated breakpoint determines an expression that begins on a line that is different from the line associated with the selected portion.

3. The method of claim 2 , further comprising receiving a second debug command that sets a second indicated breakpoint on the same line in the source code associated with the code segment, such that a plurality of breakpoints are concurrently active for the code segment.

4. The method of claim 1 , the code segment associated with a current file that contains the expressions that define the code segment, wherein the nearest enclosing expression to the indicated breakpoint refers to a function that is defined outside of the current file.

5. The method of claim 1 wherein the visual user interface is an Interactive Development Environment (“IDE”) having a predefined set of interfaces for developing and testing program code.

6. The method of claim 5 wherein the IDE uses Eclipse code, and the visual user interface is implemented as a debug perspective plug-in.

7. The method of claim 5 wherein no launch configuration information is required to be forwarded to the IDE prior to debugging the code.

8. The method of claim 1 wherein the interpreted programming language is S-PLUS.

9. The method of claim 1 wherein the interpreted programming language is a language used to generate statistical programs.

10. The method of claim 1 , the generating of the breakpoint address that indicates a location in the segment of code that corresponds to the beginning of the determined enclosing expression, further comprising:

generating a logical breakpoint address that indicates the beginning of the determined enclosing expression; and

mapping the generated logical breakpoint address to a memory address that corresponds to an element in a parse tree generated by the interpreter for the determined enclosing expression, the element corresponding to the beginning of evaluation by the interpreter of the determined enclosing expression.

11. The method of claim 1 wherein the one or more additional debug commands include one or more of commands for stepping execution, marking or unmarking breakpoints, or continuing execution.

12. The method of claim 1 wherein the one or more additional debug commands include one or more of commands for examining an associated value of an object, an expression, or a variable.

13. The method of claim 1 wherein the breakpoint address is generated without using pre-computed symbolic information associated with the code segment.

14. A non-transitory computer-readable medium whose contents enable a computing system to provide for debugging of interpreted code in a visual debugger using breakpoints that facilitate step-based evaluation of expressions, by performing a method comprising:

presenting a user interface for receiving debugging commands;

in response to a received debug command to set or change an indicated breakpoint in a segment of code that is expressed in an interpreted programming language and that defines one or more expressions,

determining the nearest enclosing expression to the indicated breakpoint, including when the nearest enclosing expression begins on a line of source code associated with the code segment that is different from a line of the associated source code that contains the indicated breakpoint; and

generating a breakpoint address that indicates a location in the segment of code that corresponds to the beginning of the determined enclosing expression when the code segment is evaluated;

causing the code segment to be evaluated using an interpreter for the interpreted programming language, such that evaluation automatically stops when the location in the code segment that corresponds to the breakpoint address is encountered; and

causing one or more source code statements that correspond to and indicate the location in the code segment where the evaluation stopped to be displayed in the visual interface.

15. The computer-readable medium of claim 14 , the method further comprising:

receiving one or more additional debug commands to further control the evaluation of the code segment or to examine values of variables or expressions contained in the code segment.

16. The computer-readable medium of claim 14 wherein the visual interface is an Interactive Development Environment (“IDE”).

17. The computer-readable medium of claim 14 wherein the computer-readable medium is a memory in a computing device.

18. The computer-readable medium of claim 14 wherein the contents are instructions that, when executed, cause the computing system to perform the method.

19. The computer-readable medium of claim 14 wherein the instructions that perform the causing of the code segment to be evaluated using the interpreter for the interpreted programming language, such that evaluation automatically stops when the location in the code segment that corresponds to the breakpoint address is encountered are implemented as hooks in an existing interpreter.

20. A computing system for debugging code programmed in an interpreted language defining a plurality of expressions, comprising:

a memory;

a computer processor;

a parser stored in the memory and configured, when executed by the computer processor, to create a parse tree for an indicated function;

a debug command module stored in the memory and configured, when executed by the computer processor, to receive debugging commands from a user via a visual user interface and, when a command is received to set or change a breakpoint in the indicated function, generating a logical breakpoint address that indicates a nearest enclosing expression contained within the function, including when the nearest enclosing expression begins on a line of source code associated with the indicated function that is different from a line of the associated source code that contains the indicated breakpoint;

a debug handler stored in the memory and configured, when executed by the computer processor, to receive the generated logical breakpoint address, resolve the logical breakpoint address into a memory address that corresponds to a location in the parse tree created for the function, record information to associate the breakpoint with the function; and

an evaluation module for the interpreted language stored in the memory and configured, when executed by the computer processor, to receive an expression in the interpreted language that contains a call to the function, and traverse a parse tree corresponding to the received expression to generate output defined by evaluating the expression such that, when the location that corresponds to the breakpoint associated with the function is encountered in the parse tree created for the function, the evaluation module pauses to receive debug commands to further control evaluation of the expression or to examine values of objects associated with the expression.

21. The computing system of claim 20 wherein the interpreted language is S-PLUS.

22. The computing system of claim 20 wherein the parser is a preexisting parser unmodified to support debugging operations.

23. The computing system of claim 20 wherein the evaluation module is modified to examine each node in a parse tree when the node is traversed to determine whether a breakpoint has been set.

24. The computing system of claim 20 wherein the debug command module and debug handler are executed in separate processes and/or are hosted on separate machines.

25. The computing system of claim 20 wherein the debug commands to further control evaluation of the expression include one or more of commands for stepping execution, marking or unmarking breakpoints, or continuing execution.

26. The computing system of claim 20 wherein the debug commands to examine values of objects associated with the expression include one or more of commands for examining an associated value of an object, an expression, or a variable.

Assignments (17)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 034536 / FRAME 0438) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061574/0963 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →
SECURITY INTEREST Recorded Dec 5, 2014
From: TIBCO SOFTWARE INC.; TIBCO KABIRA LLC; NETRICS.COM LLC
To: JPMORGAN CHASE BANK., N.A., AS COLLATERAL AGENT
Reel/Frame 034536/0438 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 17, 2014
From: INSIGHTFUL CORPORATION
To: TIBCO SOFTWARE INC.
Reel/Frame 034185/0091 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 17, 2014
From: INSIGHTFUL CORPORATION
To: TIBCO SOFTWARE INC.
Reel/Frame 034185/0112 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 17, 2014
From: FJELDSTAD, BRIAN; SANNELLA, MICHAEL J.; ROOSEN, CHARLES B.
To: INSIGHTFUL CORPORATION
Reel/Frame 034185/0074 →
Continuity (3)
Continuation 11784209 · Apr 4, 2007
Provisional Application 60789623 · Apr 4, 2006
Related Publication 20120167052A1 · Jun 28, 2012