IP Library Granted Patent US 10,372,581
Granted Patent B1
US 10,372,581 · App. 12/605,193 · Granted Aug 6, 2019

Instrumentation of program code for dynamic analysis

Inventor: John R. MacMillan (Toronto, CA)
Assignee: Quest Software Inc.
G06F11/3466G06F11/3476G06F11/3495
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 10,372,581
App. No.
12/605,193
Granted
Aug 6, 2019
Kind
B1
Abstract

Systems and methods for using a synchronization mechanism to dynamically update instrumentation during program execution are described herein. Using the synchronization mechanism, a decision tree structure of instruments can be avoided, saving processing resources. The synchronization mechanism can be a field or the like that is declared using a synchronization primitive. For example, the synchronization primitive can be a volatile or synchronized keyword in some programming languages. The field can refer to a currently-selected instrument implementation, thereby avoiding using a decision-tree structure to find a desired instrument implementation.

Claims (44)

1. A system for dynamically changing instrumentation used to profile a program during program execution, the system comprising:

memory comprising computer-executable instructions stored thereon, the instructions configured to implement:

a provisioner configured to insert into code of a program an event generator comprising a static call to a static instrument, the static instrument acting as a placeholder instrument, the static instrument comprising:

first and second instrument implementations, wherein at least one of the first and second instrument implementations is configured to gather data from the program in response to being invoked;

first and second event handlers configured to be responsive to an event generated by the event generator, wherein the first event handler invokes the first instrument implementation and the second event handler invokes the second instrument implementation; and

a synchronization field that is declared using a synchronization primitive, the synchronization field comprising a reference to the first event handler, the synchronization field configured to enable dynamic selecting, during execution of the program, of which event handler of the first and second event handlers is invoked in response to the static call, wherein changes made to the synchronization field during the execution are visible during the execution to multiple threads of the program;

an instrument implementation selector configured to dynamically select, during execution of the program, according to an instrumentation setting specified in a table, one of the first and second instrument implementations used to analyze the program during execution of the program by at least:

receiving a user selection of program analysis criteria via the table, the user-selected program analysis criteria specifying at least one of an inclusion and an exclusion of a category pattern; and

based at least in part on the user-selected program analysis criteria, updating the synchronization field to refer to the second event handler of the static instrument instead of the first event handler of the static instrument such that the second instrument implementation is invoked, instead of the first instrument implementation, in response to the event generated by the event generator, wherein the second instrument implementation is configured to profile the program; and

one or more processors configured to implement the computer-executable instructions.

2. The system of claim 1 , wherein the event comprises a method event.

3. The system of claim 1 , wherein the event comprises an object event.

4. A method of profiling a program during program execution, the method comprising:

by a computer system comprising computer hardware:

inserting into code of a program an event generator comprising a static call to a static agent instrument;

wherein the static agent instrument acts as a placeholder instrument and comprises:

first and second instrument implementations, wherein at least one of the first and second instrument implementations is configured to gather data from the program in response to being invoked;

first and second event handlers configured to be responsive to an event generated by the event generator, wherein the first event handler invokes the first instrument implementation and the second event handler invokes the second instrument implementation; and

a synchronization field configured to enable dynamic selecting bar an instrument implementation selector, during execution of the program, according to an instrumentation setting specified in a table, of which event handler of the first and second event handlers is invoked in response to the static call, wherein changes made to the synchronization field during the execution are visible during the execution to multiple threads of the program, wherein the synchronization field is declared using a synchronization primitive;

storing a reference to the first event handler in the synchronization field;

receiving a user selection of a program analysis preference via the table, the user-selected program analysis preference specifying at least one of an inclusion and an exclusion of a category pattern;

based at least in part on receiving the user-selected program analysis preference, updating the synchronization field of the static agent instrument to refer to the second event handler of the static agent instrument instead of the first event handler of the static agent instrument; and

calling the second event handler responsive to the event being generated by the event generator, thereby causing the second event handler to call the second instrument implementation, the second instrument implementation being configured to profile the program.

5. The method of claim 4 , further comprising providing a user interface that provides functionality for a user to provide the program analysis preference during program execution.

6. The method of claim 4 , further comprising updating the synchronization field to refer to a third event handler configured to call a third instrument implementation in response to receiving a second user program analysis preference.

7. The method of claim 4 , wherein the event comprises a method event.

8. The method of claim 4 , wherein the event comprises an object event.

9. The method of claim 4 , wherein the computer system comprises multiple computing devices.

10. The method of claim 4 , wherein the synchronization field comprises a volatile field.

11. A non-transitory computer-readable storage medium comprising computer-executable program instructions configured to implement a method of analyzing a program, the method comprising:

by one or more processors coupled with computer memory:

inserting into code of a program an event generator comprising a static call to a static instrument, the static instrument acting as a placeholder instrument, the static instrument comprising:

first and second instrument implementations, wherein at least one of the first and second instrument implementations is configured to gather data from the program in response to being invoked;

first and second event handlers configured to be responsive to an event generated by the event generator, wherein the first event handler invokes the first instrument implementation and the second event handler invokes the second instrument implementation; and

a synchronization mechanism;

using the synchronization mechanism to reference the first event handler, wherein the synchronization mechanism is declared using a synchronization primitive, wherein the synchronization mechanism is configured to enable dynamic updating, during execution of the program, of which event handler of the first and second event handlers is invoked in response to the static call, and wherein updates made to the synchronization mechanism during the execution are visible during the execution to multiple threads of the program;

determining, during the execution of the program, whether the second instrument implementation has been selected, by an instrumentation implementation selector, according to a user-specified instrumentation setting in a table, the user-specified instrumentation setting specifying at least one of an inclusion and an exclusion of a category pattern; and

in response to determining that the second instrument implementation has been selected, updating the reference to the first event handler of the static instrument to refer to the second event handler such that the second instrument implementation is invoked, instead of the first instrument implementation, in response to the event generated by the event generator.

12. The non-transitory computer-readable storage medium of claim 11 , wherein the synchronization mechanism comprises a synchronization field.

13. The non-transitory computer-readable storage medium of claim 11 , wherein the synchronization mechanism comprises a volatile field.

14. The non-transitory computer-readable storage medium of claim 11 , wherein the synchronization mechanism comprises an operating system call.

15. The non-transitory computer-readable storage medium of claim 11 , wherein the code comprises managed code.

16. The non-transitory computer-readable storage medium of claim 11 , wherein the first event handler is configured to collect no data from the program.

17. The non-transitory computer-readable storage medium of claim 11 , wherein the first event handler is configured to collect data from the program upon entry of a routine of the program.

Assignments (30)
RELEASE OF SECURITY INTEREST Recorded Nov 19, 2025
From: MORGAN STANLEY SENIOR FUNDING, INC.
To: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.
Reel/Frame 073606/0001 →
RELEASE OF SECURITY INTEREST Recorded Nov 18, 2025
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.
Reel/Frame 073613/0326 →
SECURITY INTEREST Recorded Jun 8, 2025
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; ERWIN, INC.
To: ALTER DOMUS (US) LLC
Reel/Frame 071527/0649 →
SECURITY INTEREST Recorded Jun 8, 2025
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; ERWIN, INC.
To: ALTER DOMUS (US) LLC
Reel/Frame 071527/0001 →
SECOND LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Feb 2, 2022
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.; ONE IDENTITY LLC; ONELOGIN, INC.; ONE IDENTITY SOFTWARE INTERNATIONAL DESIGNATED ACTIVITY COMPANY
To: MORGAN STANLEY SENIOR FUNDING, INC.
Reel/Frame 058952/0279 →
FIRST LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Feb 2, 2022
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.; ONE IDENTITY LLC; ONELOGIN, INC.; ONE IDENTITY SOFTWARE INTERNATIONAL DESIGNATED ACTIVITY COMPANY
To: GOLDMAN SACHS BANK USA
Reel/Frame 058945/0778 →
RELEASE OF SECOND LIEN SECURITY INTEREST IN PATENTS Recorded Feb 2, 2022
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.
Reel/Frame 059096/0683 →
RELEASE OF FIRST LIEN SECURITY INTEREST IN PATENTS Recorded Feb 2, 2022
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.
Reel/Frame 059105/0479 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Jun 7, 2018
From: QUEST SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 046327/0347 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Jun 7, 2018
From: QUEST SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 046327/0486 →
RELEASE OF FIRST LIEN SECURITY INTEREST IN PATENTS RECORDED AT R/F 040581/0850 Recorded May 22, 2018
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC. (F/K/A DELL SOFTWARE INC.); AVENTAIL LLC
Reel/Frame 046211/0735 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE PREVIOUSLY RECORDED AT REEL: 040587 FRAME: 0624. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Nov 28, 2017
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: QUEST SOFTWARE INC. (F/K/A DELL SOFTWARE INC.); AVENTAIL LLC
Reel/Frame 044811/0598 →
CHANGE OF NAME Recorded Sep 11, 2017
From: DELL SOFTWARE INC.
To: QUEST SOFTWARE INC.
Reel/Frame 043811/0564 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Nov 10, 2016
From: DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040587/0624 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Nov 9, 2016
From: DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040581/0850 →
RELEASE OF SECURITY INTEREST IN CERTAIN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (040039/0642) Recorded Oct 31, 2016
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
To: AVENTAIL LLC; DELL PRODUCTS L.P.; DELL SOFTWARE INC.
Reel/Frame 040521/0016 →
RELEASE OF SECURITY INTEREST Recorded Oct 31, 2016
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: AVENTAIL LLC; DELL PRODUCTS, L.P.; DELL SOFTWARE INC.
Reel/Frame 040521/0467 →
SECURITY AGREEMENT Recorded Sep 14, 2016
From: AVENTAIL LLC; DELL PRODUCTS, L.P.; DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040030/0187 →
SECURITY AGREEMENT Recorded Sep 14, 2016
From: AVENTAIL LLC; DELL PRODUCTS L.P.; DELL SOFTWARE INC.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 040039/0642 →
RELEASE OF SECURITY INTEREST Recorded Sep 14, 2016
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040040/0001 →
RELEASE OF SECURITY INTEREST Recorded Sep 14, 2016
From: BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040065/0618 →
RELEASE OF SECURITY INTEREST Recorded Sep 13, 2016
From: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLANT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040065/0216 →
PATENT SECURITY AGREEMENT (TERM LOAN) Recorded Jan 2, 2014
From: DELL INC.; APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 031899/0261 →
PATENT SECURITY AGREEMENT (ABL) Recorded Jan 2, 2014
From: DELL INC.; APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 031898/0001 →
PATENT SECURITY AGREEMENT (NOTES) Recorded Jan 2, 2014
From: APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS FIRST LIEN COLLATERAL AGENT
Reel/Frame 031897/0348 →
CHANGE OF NAME Recorded Aug 19, 2013
From: QUEST SOFTWARE, INC.
To: DELL SOFTWARE INC.
Reel/Frame 031035/0914 →
RELEASE OF SECURITY INTEREST IN PATENT COLLATERAL Recorded Sep 28, 2012
From: WELLS FARGO CAPITAL FINANCE, LLC (FORMERLY KNOWN AS WELLS FARGO FOOTHILL, LLC)
To: QUEST SOFTWARE, INC.; AELITA SOFTWARE CORPORATION; SCRIPTLOGIC CORPORATION; VIZIONCORE, INC.; NETPRO COMPUTING, INC.
Reel/Frame 029050/0679 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 13, 2010
From: MACMILLAN, JOHN R.
To: QUEST SOFTWARE, INC.
Reel/Frame 024674/0337 →
CORRECTIVE ASSIGNMENT TO CORRECT THE CITIZENSHIP OF QUEST SOFTWARE, INC. FROM A CALIFORNIA CORPORATION TO A DELAWARE CORPORATION PREVIOUSLY RECORDED ON REEL 024132 FRAME 0728. ASSIGNOR(S) HEREBY CONFIRMS THE GRANT, ASSIGNMENT, TRANSFER, AND CONVEYANCE TO AGENT OF A CONTINUING SECURITY INTEREST IN THE ADDITIONAL PATENTS. Recorded Jul 2, 2010
From: QUEST SOFTWARE, INC.; AELITA SOFTWARE CORPORATION; SCRIPTLOGIC CORPORATION; VIZIONCORE, INC.; NETPRO COMPUTING, INC.
To: WELLS FARGO CAPITAL FINANCE, LLC, AS AGENT
Reel/Frame 024634/0567 →
AMENDMENT NUMBER FOUR TO PATENT SECURITY AGREEMENT Recorded Mar 24, 2010
From: QUEST SOFTWARE, INC.; AELITA SOFTWARE CORPORATION; SCRIPTLOGIC CORPORATION; VIZIONCORE, INC.; NETPRO COMPUTING, INC.
To: WELLS FARGO CAPITAL FINANCE, LLC, AS AGENT
Reel/Frame 024132/0728 →
Continuity (1)
Provisional Application 61108409 · Oct 24, 2008