IP Library Granted Patent US 9,250,924
Granted Patent B2
US 9,250,924 · App. 13/630,784 · Granted Feb 2, 2016

Efficient method data recording

Inventors: Eyal Koren (Dafna, IL); Asaf Dafner (Gedera, IL); Shiri Semo Judelman (Kfar-Saba, IL)
Assignee: IDENTIFY SOFTWARE LTD.
G06F9/4425G06F11/3466G06F11/3636
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 9,250,924
App. No.
13/630,784
Granted
Feb 2, 2016
Kind
B2
Abstract

According to one general aspect, a method may include monitoring the execution or at least a portion of a software application. The method may also include collecting subroutine call information regarding a plurality of subroutine calls included by the portion of the software application, wherein one or more of the subroutine calls is selected for detailed data recording. The method may further include pruning, as the software application is being executed, a subroutine call tree to include only the subroutine calls selected for detailed data recording and one or more parent subroutine calls of each subroutine calls selected for detailed data recording.

Claims (63)

1. A method executed by a processor, comprising:

monitoring the execution of at least a portion of a software application;

collecting subroutine call information regarding a plurality of subroutine calls included by the portion of the software application;

selecting one or more of the plurality of subroutine calls for detailed data recording;

maintaining an array of one or more subroutine call elements, the maintaining including:

adding a single shared subroutine call entry element to the array;

adding a first subroutine call entry element to the array when a first subroutine is called, the first subroutine call entry element including a first pointer to the single shared subroutine call entry element;

adding a second subroutine call entry element to the array when a second subroutine is called, the second subroutine call entry element including a second pointer to the single shared subroutine call entry element; and

removing, when the second subroutine exits, the second subroutine call entry element from the array based on determining that the second subroutine is not selected for detailed data recording; and

generating a subroutine call tree based on the array of one or more subroutine call elements.

2. The method of claim 1 , wherein the monitoring includes injecting code into the plurality of subroutine calls selected for detailed data recording.

3. The method of claim 1 , wherein collecting subroutine call information includes, only for each subroutine call selected for detail data recording, collecting all of the input arguments passed to the subroutine call and a return value, if any, from the call of a respective subroutine.

4. The method of claim 1 , wherein maintaining the array of one or more subroutine call elements further includes:

adding, when the first subroutine exits, a first subroutine call exit element to the array based on determining that the first subroutine is selected for-detailed data recording.

5. The method of claim 1 , wherein maintaining the array of one or more subroutine call elements further includes:

not removing, when the first subroutine exits, the first subroutine call entry element from the array based on determining that the first subroutine is selected for detailed data recording or based on determining that the first subroutine is associated with a parent subroutine that is selected for detailed data recording.

6. The method of claim 1 , wherein collecting subroutine call information includes:

for each subroutine call, placing on a memory stack an entry time associated with the subroutine call, and a pointer to a subroutine call entry element included in the array and associated with the subroutine call.

7. The method of claim 4 , wherein the first subroutine call exit element includes subroutine call information regarding the first subroutine call.

8. An apparatus comprising:

a monitoring engine configured to:

monitor execution of at least a portion of a software application,

a processor configured to:

execute the software application,

select one or more of a plurality of subroutine calls for detailed data recording, the plurality of subroutine calls included by the portion of the software application, and

generate a subroutine call tree based on an array of one or more subroutine call elements,

a pruning engine configured to:

manage collecting of subroutine call information regarding the plurality of subroutine calls included by the portion of the software application, and

maintain the array of one or more subroutine call elements, the maintaining including:

adding a single shared subroutine call entry element to the array;

adding a first subroutine call entry element to the array when a first subroutine is called, the first subroutine call entry element including a first pointer to the single shared subroutine call entry element,

adding a second subroutine call entry element to the array when a second subroutine is called, the second subroutine call entry element including a second pointer to the single shared subroutine call entry element; and

removing, when the second subroutine exits, the second subroutine call entry element from the array based on determining that the second subroutine is not selected for detailed data recording, and

a memory configured to:

store the subroutine call information.

9. The apparatus of claim 8 , wherein the monitoring engine is further configured to:

inject code into the plurality of subroutine calls selected for detailed data recording.

10. The apparatus of claim 8 , wherein managing collecting of subroutine call information includes, only for each subroutine call selected for detail data recording, collecting all of the input arguments passed to the subroutine call and a return value, if any, from the call of a respective subroutine.

11. The apparatus of claim 8 , wherein maintaining the array of one or more subroutine call elements further includes:

adding, when the first subroutine exits, a first subroutine call exit element to the array based on determining that the first subroutine is selected for detailed data recording.

12. The apparatus of claim 8 , wherein maintaining the array of one or more subroutine elements further includes:

not removing, when the first subroutine exits, the first subroutine call entry element from the array based on determining that the first subroutine is selected for detailed data recording or based on determining that the first subroutine is associated with a parent subroutine that is selected for detailed data recording.

13. The apparatus of claim 8 ,

wherein the memory includes a memory stack; and

wherein the processor is further configured to:

for each subroutine call, place on the memory stack an entry time associated with the subroutine call, and a pointer to a subroutine call entry element included in the array and associated with the subroutine call.

14. The apparatus of claim 11 , wherein the first subroutine call exit element includes subroutine call information regarding the first subroutine call.

15. A computer program product for aiding software analysis, the computer program product being tangibly and non-transitorily embodied on a non-transitory computer-readable medium and including executable code that, when executed, is configured to cause an apparatus to:

monitor the execution of at least a portion of a software application;

collect subroutine call information regarding a plurality of subroutine calls included by the portion of the software application;

select one or more of the subroutine calls for detailed data recording;

maintain an array of one or more subroutine call elements, the maintaining including:

adding a single shared subroutine call entry element to the array;

adding a first subroutine call entry element to the array when a first subroutine is called, the first subroutine call entry element including a first pointer to the single shared subroutine call entry element;

adding a second subroutine call entry element to the array when a second subroutine is called, the second subroutine call entry element including a second pointer to the single shared subroutine call entry element; and

removing, when the second subroutine exits, the second subroutine call entry element from the array based on determining that the second subroutine is not selected for detailed data recording; and

generate a subroutine call tree based on the array of one or more subroutine call elements.

16. The computer program product of claim 15 , wherein the executable code, when executed, is configured to further cause the apparatus to:

only for each subroutine call selected for detail data recording, collect all of the input arguments passed to the subroutine call and a return value, if any, from the call of a respective subroutine.

17. The method of claim 1 , further comprising:

pruning, as the software application is being executed, the subroutine call tree to include only the subroutine calls selected for detailed data recording and one or more parent subroutine calls for each of the subroutine calls selected for detailed data recording.

18. The apparatus of claim 8 , wherein the pruning engine is further configured to:

prune, as the software application is being executed, the subroutine call tree to include only the subroutine calls selected for detailed data recording and one or more parent subroutine calls for each of the subroutine calls selected for detailed data recording.

Assignments (9)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 17, 2026
From: BMC SOFTWARE ISRAEL LTD
To: BMC HELIX ISRAEL LTD.
Reel/Frame 075403/0859 →
MERGER Recorded Nov 9, 2018
From: IDENTIFY SOFTWARE LTD.
To: BMC SOFTWARE ISRAEL LTD.
Reel/Frame 047465/0871 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 9, 2018
From: IDENTIFY SOFTWARE LTD.
To: BMC SOFTWARE ISRAEL LTD.
Reel/Frame 047465/0855 →
RELEASE OF PATENTS Recorded Oct 5, 2018
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: BMC SOFTWARE, INC.; BLADELOGIC, INC.; BMC ACQUISITION L.L.C.
Reel/Frame 047198/0468 →
RELEASE OF SECURITY INTEREST Recorded Aug 25, 2017
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: BMC SOFTWARE, INC.; BLADELOGIC, INC.; IDENTIFY SOFTWARE LTD. (IL)
Reel/Frame 043678/0589 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE ADDRESS PREVIOUSLY RECORDED AT REEL: 030283 FRAME: 0805. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT . Recorded Jul 20, 2017
From: KOREN, EYAL; DAFNER, ASAF; JUDELMAN, SHIRI S.
To: IDENTIFY SOFTWARE LTD. (IL)
Reel/Frame 043274/0881 →
SECURITY AGREEMENT Recorded Dec 17, 2013
From: IDENTIFY SOFTWARE, LTD
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 031833/0950 →
SECURITY AGREEMENT Recorded Sep 11, 2013
From: BMC SOFTWARE, INC.; BLADELOGIC, INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 031204/0225 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 25, 2013
From: KOREN, EYAL; DAFNER, ASAF; JUDELMAN, SHIRI S.
To: IDENTIFY SOFTWARE LTD. (IL)
Reel/Frame 030283/0805 →
Continuity (1)
Related Publication 20140096114A1 · Apr 3, 2014