US7350194B1 - Techniques for debugging computer programs involving multiple computing machines - Google Patents
Techniques for debugging computer programs involving multiple computing machines Download PDFInfo
- Publication number
- US7350194B1 US7350194B1 US10/143,890 US14389002A US7350194B1 US 7350194 B1 US7350194 B1 US 7350194B1 US 14389002 A US14389002 A US 14389002A US 7350194 B1 US7350194 B1 US 7350194B1
- Authority
- US
- United States
- Prior art keywords
- data
- machine
- machines
- debugging
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime, expires
Links
- 238000000034 method Methods 0.000 title claims abstract description 289
- 238000004590 computer program Methods 0.000 title claims abstract description 37
- 230000008569 process Effects 0.000 claims description 180
- 238000013507 mapping Methods 0.000 claims description 25
- 230000004044 response Effects 0.000 claims description 16
- 238000004891 communication Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 239000002131 composite material Substances 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 235000014510 cooky Nutrition 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Definitions
- the present invention relates to debugging a computer program.
- the present invention relates to debugging a computer program that is executed by multiple virtual machines.
- An advantage of a virtual machine is that the same coded instructions for a particular virtual machine may be used on multiple computer devices built with different processors supporting different native instructions.
- the particular virtual machine is formed separately, using instructions from a different native instruction set for each different processor. Then, any program written in or compiled to the coded instructions for the particular virtual machine can be executed on any processor that executes the particular virtual machine. Examples of virtual machines include the JAVA virtual machine (JVM), the BASIC interpreter, the VisualBasic interpreter, and the interpreter for the PL/SQL language of the Oracle Corporation.
- JVM JAVA virtual machine
- BASIC interpreter the BASIC interpreter
- VisualBasic interpreter the VisualBasic interpreter
- interpreter for the PL/SQL language of the Oracle Corporation the interpreter for the PL/SQL language of the Oracle Corporation.
- Debuggers are processes that provide functions that enable a programmer to determine the contents of computer memory at a time of execution for any instruction in one or more sequences of instructions.
- the debugger client process sends a message to the virtual machine requesting that the virtual machine execute the next instruction and return the contents of one or more memory locations.
- the debugger client process invokes one or more routines of the virtual machine to execute the next instruction.
- routine refers to a sequence of instructions ending in a return to a calling entity.
- Other terms commonly used for routines include “functions,” “procedures,” “methods,” and “subroutines.”
- the main block of code that is first executed for a program that often returns control to an operating system is also a routine.
- the debugger client process often presents to the user the context of program execution using a stack of routines that have been called but have not yet returned control to the calling routine.
- coded instructions from one or more modules can be linked to form an executable program.
- Modules can consist of source language statements, coded instructions for a particular virtual machine, runtime executables, or some combination of these, with or without associated data.
- Modules in a high-level source language may be compiled by a run time compiler to produce corresponding modules in coded instructions.
- a program may include a machine-executable module, a module executable by a first type of virtual machine, and a module executable by a second type of virtual machine.
- a routine in the machine-executable module may call a routine in the module running in a first type of virtual machine, and that routine may call another routine in the module running in a second type of virtual machine.
- multiple virtual machines refers to multiple instances of the same virtual machine, virtual machines for different languages, or both.
- techniques for debugging a computer program that includes multiple modules executing on multiple machines, includes receiving, at a first unifying component, first data from a first machine and second data from a different unifying component.
- the first data includes debugging information generated by the first machine.
- the different unifying component is associated with a subset of the machines.
- the second data includes debugging information generated by the subset of machines.
- third data is formed indicating a single integrated representation of debugging information for the computer program.
- techniques for debugging a computer program that includes multiple modules executing on multiple machines, include receiving, at a unifying component, a first message from a debugger process.
- the first message specifies a debugging operation associated with a request set of one or more instructions or objects of the computer program, or both.
- the unifying component determines that a first machine is associated with a module that includes at least one member of the request set. Based on the first message, the unifying component generates a second message indicating the debugging operation associated with the member of the request set. The unifying component sends the second message to the first machine.
- FIG. 2 is a block diagram illustrating program modules on a first program host, according to an embodiment
- FIG. 4 is a block diagram illustrating multiple language modules for a program on a first program host, according to an embodiment
- FIG. 5 is a block diagram illustrating a stack of frames associated with routines having instructions corresponding to the multiple language modules of FIG. 5 , according to an embodiment
- FIG. 6A is a flowchart illustrating at a high level a method for debugging a computer program having multiple modules executed by multiple virtual machines according to an embodiment
- FIG. 6C and FIG. 6D make up a flowchart illustrating a method at a unifying process for debugging a computer program executed by multiple virtual machines based on a message from a virtual machine, according to an embodiment
- FIG. 7 is a block diagram illustrating a modified virtual machine, according to an embodiment
- FIG. 8 is a flowchart illustrating a method for debugging a computer program having multiple language modules executed by multiple virtual machines according to an embodiment
- FIG. 9 is a block diagram illustrating multiple tier program modules on multiple hosts, according to an embodiment.
- FIG. 1 is a block diagram of a system for unifying debugging information from multiple virtual machines according to an embodiment.
- a multiple module program executes on one or more program hosts 110 , for example to provide a service over a network.
- the program modules 130 are stored on the program hosts 110 .
- a JAVA program is made up of JAVA modules stored in modules 130 for the program.
- the program modules 130 are executed by multiple virtual machines, for example, first virtual machine 121 , second virtual machine 122 , and third virtual machine 123 .
- the system also includes a debugger client 102 executing on a debugger client host 104 .
- the debugger client 102 includes an interface 152 a for communicating with the virtual machines 121 , 122 , 123 .
- the virtual machines 121 , 122 , 123 include interfaces 154 a , 154 c , 154 d , respectively, for communicating with a debugger client.
- the debugger client and the interfaces are described in more detail in a later section.
- Embodiments of the present invention include a unifying process 142 for mitigating communications among the debugger client 102 and the virtual machines 121 , 122 , 123 .
- the unifying process includes an interface 152 b and an interface 154 b .
- the interfaces 152 a , 152 b are collectively referenced as interface 152
- interfaces 154 a , 154 b , 154 c , 154 d are collectively referenced as interface 154 .
- the unifying process is described in more detail in a later section.
- the user is prompted to specify one or more JAVA statements to serve as execution breakpoints and to specify one or more JAVA objects or attributes whose contents are of interest.
- the debugger client 102 sends messages to the virtual machine 121 .
- the commands include the information to control execution of the modules, such as the breakpoints and memory locations of interest.
- the virtual machine 121 executes the coded instructions of one or more modules until a breakpoint is reached.
- the virtual machine 121 reports that the breakpoint is reached in a message containing debugging information to the client 102 .
- the user then specifies a next debugging operation to perform, such as executing the next statement in the program, or reporting the contents of one or more memory locations of the virtual machine 121 .
- the virtual machine 121 retrieves the contents of the specified memory locations at that stage of execution, and sends a report message including more debugging information back to the debugger client 102 .
- the debugging information includes the memory contents.
- the debugger client 102 presents the results, usually in association with the instruction in the high-level language that corresponds to the breakpoint.
- debugging information is information based on data provided by one or more virtual machines, which is utilized by a user of client 102 to assess the performance of a computer program.
- Debugging information includes, for example, contents of memory locations at a particular stage of execution, a call stack of virtual machines or routines that have been invoked but not yet ended at the particular stage of execution, lists of objects associated with one or more routines or virtual machines, tracing information, and time profile information, among others.
- Tracing information describes which groups of one or more instructions are executed. The groups may be modules or routines, for example.
- Time profile information describes execution time consumed by groups of one or more executed instructions.
- the debugger client often provides the user with information about the call stack of the virtual machine, which provides context for the state of the program execution at the time the breakpoint is encountered.
- a call stack is often presented as a series of frames representing calls to routines that have not yet returned. The frames are positioned in the stack in order of execution.
- a frame in the stack is often expressed by the statement in the high-level language that calls the routine or the name of the routine. The stack helps a user to identify where in the execution of the program the current memory contents occur.
- the debugger client 102 and virtual machine 121 are designed to exchange commands and responses through interface 152 a on the debugger and complementary interface 154 a on the virtual machine. Any manner known in the art for an interface may be employed.
- an interface is a specified set of procedure calls that include specification of a procedure name, and specification of number and types of parameters passed to the procedure and returned from the procedure.
- the debugger client typically is executed on the same host as the virtual machine rather than on different host as depicted in FIG. 1 .
- the set of procedures that can be invoked in the virtual machine make up the virtual machine interface 154 a
- the set of procedures that can be invoked in the debugger client make up the debugger client interface 152 a.
- Such protocols allow the debugger client 102 to reside on a different host 104 from the host 110 where the virtual machine 121 that is executing the module being debugged resides.
- the virtual machine interface 154 a represents procedures that process the types of information passed to the virtual machine according to the protocol, and procedures that produce messages for the debugger client according to the protocol.
- the debugger client interface 152 a represents procedures that process the types of information passed to the debugger client according to the protocol, and procedures that produce messages for the virtual machine according to the protocol.
- a unifying process 142 is interposed between the debugger client 102 and the virtual machine 121 .
- the unifying process 142 appears to be a virtual machine by virtue of the virtual machine interface 154 b .
- the unifying process 142 appears to be a debugger client by virtue of the debugger client interface 152 b .
- the unifying process 142 produces integrated debugging information for presentation at the debugger client 102 , no matter which virtual machines execute different modules of the program, as described in more detail in a later section. Although shown as a separate process in FIG.
- the unifying process 142 is merely a component of one or more of the other processes, such as the processes that implement the debugger client 102 , the virtual machine 121 , a development editor (not shown) or a database server (not shown).
- FIG. 1 Also shown in FIG. 1 , are a second virtual machine 122 with a virtual machine interface 154 c and a third virtual machine 123 with a virtual machine interface 154 d .
- the second and third virtual machines may execute at overlapping times relative to the first virtual machine 121 .
- a JAVA module executing on a first JAVA virtual machine may invoke a procedure from a second JAVA module that may be executed by a second instance of the JAVA virtual machine on a second host. After control returns from the called procedure of the second module, the first JAVA module may then invoke the same or a different procedure that starts a third instance of the JAVA virtual machine.
- the two or three JAVA virtual machines might execute on separate processors of the same host.
- multiprocessing is performed by sharing time on the same one or more processors. If the calling module waits for the response from the called module before proceeding, the call is said to be synchronous.
- the unifying process is configured to provide debugging information with respect to a single stack of frames for all modules involved in a series of synchronous calls.
- the unifying process is also configured, to provide debugging information as separate stacks (“threads”) for any part of the program invoked by asynchronous calls.
- a JAVA procedure invoked from a database may include an SQL statement.
- the JAVA virtual machine is executing to interpret the JVM coded instructions (bytecode).
- an SQL virtual machine is executed.
- the SQL statement may include an operation that triggers a procedure call for a module written in PL/SQL; so a PL/SQL virtual machine is executed to interpret the PL/SQL statements of the PL/SQL module.
- the second and third virtual machines, 122 , 123 communicate with the unifying process 142 , as does the first virtual machine 121 .
- the three virtual machines communicate with the unifying process 142 through the same debugger client interface 152 b of the unifying process, as described in more detail below.
- the virtual machines of different languages communicate through different debugger client interfaces.
- the unifying process 142 may exchange debugging information with more or fewer virtual machines.
- the virtual machines 121 , 122 , 123 are shown executing on the program hosts 110 , in other embodiments, one or more of the virtual machines can execute instead on any host that includes either direct or remote access to an appropriate subset of the modules 130 to be executed by the virtual machine.
- the unifying process 142 is depicted in FIG. 1 as residing on the same hosts where the virtual machines reside, embodiments that use a network protocol for the interfaces allow the unifying process to reside on any host on the network.
- the modules 130 for the program are distributed over several program hosts. It is further assumed that the first virtual machine 121 is a first instance of a virtual machine, such as a JVM, that executes on a first program host, and that the second virtual machine 122 is a second instance of the same virtual machine, such as another JVM, that executes on a second program host.
- a virtual machine such as a JVM
- the second virtual machine 122 is a second instance of the same virtual machine, such as another JVM, that executes on a second program host.
- FIG. 2 is a block diagram illustrating program modules 230 on the first program host, according to an embodiment.
- the modules 230 include modules of coded instructions based on an A module 240 and a B module 260 of statements in the same high-level language.
- the modules 230 include JAVA classfiles of JAVA bytecode based on an A module 240 of statements in the JAVA language and a B module 260 of statements in the JAVA language.
- any method may be used to associate high-level language statements depicted in FIG. 2 , with the coded instructions actually interpreted by the virtual machine.
- the coded instructions are determined from the source code by compiling just before the virtual machine executes the coded instructions.
- the high-level language statements are compiled into coded instructions ahead of time, but pointers relate coded instructions to the associated high-level language statement.
- the A module 240 includes statements 242 , 243 , 244 , 245 , 246 in the high-level language that define a routine X.
- the A module 240 may also include other statements represented by the ellipses 241 , 247 that are not relevant to illustrating an embodiment of the invention.
- the B module 260 includes statements 262 , 263 , 264 , 265 , 266 in the high-level language that defines a routine Y.
- the B module 260 may also include other statements represented by the ellipses 261 , 267 that are not relevant to illustrating an embodiment of the invention.
- routine X starts in statement 242 , includes other statements represented by the ellipsis 243 , and then includes a statement 244 to invoke routine Y of the B module.
- routine Y a JAVA static method
- routine Y a JAVA static method
- ClassQ a JAVA class named “ClassQ” in the B package
- Routine X continues with other statements represented by the ellipsis 245 . Routine X ends with statement 246 , which causes the virtual machine to return control to whatever entity invoked the routine X.
- routine Y starts in statement 262 , includes other statements represented by the ellipsis 263 , and then includes a statement 264 to invoke routine Z of a C module on another host. Routine Y continues with other statements represented by the ellipsis 265 . Routine Y ends with statement 266 , which causes the virtual machine to return control to whatever routine called routine Y. For example, when routine X invokes the routine Y, control is returned to routine X after the virtual machine executes all the statements in routine Y.
- Invoking a routine in the module C on a remote host involves communication from the first virtual machine 121 that executes the coded instructions for the A module and the B module to the second virtual machine 122 on the remote host that executes the coded instructions for the C module. Any method known in the art to provide the information and establish the connection may be used.
- FIG. 2 also illustrates frames.
- a frame is a level of execution within a program.
- a frame is added to a stack of frames whenever an instruction that invokes another routine is executed by a virtual machine.
- a frame is removed from a stack when the routine returns control to the calling program.
- frame 252 is formed when Routine X is executed
- Frame 272 is formed when Routine Y is executed.
- Frame 272 is removed when the statement 266 that ends routine Y is executed
- frame 252 is removed when the statement that ends routine X is executed. If a routine is called recursively, that routine may form several frames during execution.
- FIG. 3 is a block diagram illustrating a stack 330 , desired by a user, for a breakpoint encountered while routine Z is executing.
- the frame is usually specified simply by the name of the routine whose invocation created the frame on the stack, not by the complete listing of statements in the routine.
- Frame 252 is usually specified as the frame representing the call to Routine X.
- the frame information usually includes not only the name of the routine invoked but also the position in the invoking routine where the invocation is made. Such a position is the “current position” in the invoking routine.
- the current position can be specified in any manner known in the art. For example, in one embodiment, a program counter specifies the position. In another embodiment, a statement number specifies the current position.
- the stack 330 includes frames 252 , 272 representing invocations of routines X and Y, respectively, from the modules on the first host and includes a frame 380 representing the invocation of routine Z of module C on the second host.
- Ellipsis 332 represents frames for routines executed before routine X is invoked.
- Frame 380 represents routine Z having statements 381 , 383 , 388 in the high-level language that have been executed before the breakpoint.
- the routine Z starts in statement 381 , includes other statements represented by the ellipsis 383 , and ends at the last statement 388 .
- frame 380 is the last frame in the stack.
- subsequent frames represented by ellipsis 338 , follow frame 380 .
- Unified stack 330 represents call information in a manner consistent with how users think about the program that is being debugged. Specifically, users typically consider the program as a single process involving a sequence of calls, not as a complex web of interactions between disparate modules executing in separate processes. Using the unified stack 330 , a user can easily determine the contents of variables in routines X, Y, and Z at the stage when the breakpoint statement is executed. The user can also set the contents of those variables to different values.
- the frame 380 of instructions executed on the remote host would not be displayed after frames 252 and 272 by the debugger client 102 communicating with the first virtual machine 121 .
- the user would not be able to use debugger client 102 for setting or reporting contents of variables in Routine Z associated with frame 380 .
- the user would ordinarily execute a second debugger client (not shown) that communicates with the second virtual machine 122 .
- Frame 380 may then be indicated in a graphical user interface of the second debugger client.
- the unifying process 142 is interposed between the debugger client and the virtual machines.
- the unifying process 142 manages debugging information related to the frames of the stacks associated with multiple virtual machines, and the unifying process interleaves the information to reference a single stack that is presented to the user at a single debugger client.
- the unifying process 142 manages debugging information for frames 252 , 272 , associated with coded instructions interpreted by the first virtual machine 121 , and manages debugging information for frame 380 associated with coded instructions interpreted by the second virtual machine 122 .
- the unifying process interleaves this information to build the unified stack 330 of frames as shown in FIG.
- the debugger client presents the debugging information to the user in the context of the unified stack of FIG. 3 .
- Various techniques that may be used by the unifying process to construct the unified stack are described in greater detail hereafter.
- the modules 130 for the program are modules of coded instructions for different virtual machines based on modules in different high-level languages. It is further assumed that the first virtual machine 121 is a JVM, that the second virtual machine 122 is an SQL virtual machine, and that the third virtual machine is a PL/SQL virtual machine.
- FIG. 4 is a block diagram illustrating multiple language modules for a program on a first program host, according to an embodiment.
- the JAVA module 440 includes statements 422 , 423 , 424 , 425 , 426 in the JAVA language that define a routine Q.
- the JAVA module 440 also includes statements 442 , 443 , 444 , 445 , 446 in the JAVA language that define a routine S.
- the JAVA module 440 may also include other statements, represented by the ellipses 421 , 427 , 447 , that are not relevant to illustrating an embodiment of the invention.
- the PL/SQL module 460 includes statements 462 , 463 , 464 , 465 , 466 in the PL/SQL language that define a routine R.
- the PL/SQL module 460 may also include other statements represented by the ellipses 461 , 467 that are not relevant to illustrating an embodiment of the invention.
- any method may be used to associate high-level language statements depicted in FIG. 4 , with the coded instructions actually interpreted by the virtual machine.
- the JAVA routine Q starts in statement 422 , includes other statements represented by the ellipsis 423 , and then includes a statement 424 that involves interaction with a SQL server.
- JDBC JAVA database connection
- statement 424 is a call to a JDBC routine to execute an SQL query for retrieving data from the database, and would be of the form:
- SQL query (“SQL query”);
- Routine Q continues with other statements represented by the ellipsis 425 .
- Routine Q ends with statement 426 , which causes the JVM to return control to whatever entity invoked the routine Q.
- the routine S starts in statement 442 , includes other statements represented by the ellipsis 443 , and then includes a statement 444 involved in submitting a second SQL statement to a SQL server.
- statement 444 is a call to a JDBC routine to prepare another SQL “SELECT” command to a database server to retrieve data from the database.
- the routine S continues with other statements represented by the ellipsis 445 . Routine S ends with statement 446 , which causes the JVM to return control to whatever entity invoked the routine S.
- statement 462 starts in statement 462 , includes other statements represented by the ellipsis 463 , and then includes a statement 464 that invokes the JAVA routine S.
- statement 464 is of the form:
- Routine R continues with other statements represented by the ellipsis 465 .
- Routine R ends with statement 466 , which causes the PL/SQL virtual machine to return control to whatever entity invoked the routine R.
- frame 432 represents routine Q which starts at a first statement 422 in the routine Q and ends at the last statement 426 of routine Q.
- Frame 452 represents routine S which starts at a first statement 442 in the routine S and ends at the last statement 446 of routine S.
- Frame 472 represents routine R which starts at a first statement 462 in the routine R and ends at the last statement 466 of routine R.
- Other statements are represented by ellipses 423 , 425 , 443 , 445 , 463 , 465 .
- FIG. 5 is a block diagram illustrating a stack 530 , desired by a user, which includes frames from all the modules executed, regardless of the language, and the virtual machine, executing the modules.
- the stack 530 includes JAVA frames 432 , 452 from the JAVA module 440 and PL/SQL frame 472 from the PL/SQL module 460 .
- the stack 530 also includes frames 532 , 534 for the SQL statements 533 , 535 , respectively, executed by the SQL virtual machine 122 of the database server.
- the frame stack 530 of FIG. 5 is useful at a single debugger client because it shows the sequence of frames representing routines in the order executed.
- Ellipsis 532 represents frames associated with routines executed before routine Q is invoked.
- the routine in the frame immediately preceding frame 432 includes a statement that causes routine Q to be invoked.
- the stack 530 next includes JAVA frame 432 representing execution of the JAVA statements 422 , 423 , 424 of routine Q up to the statement 424 invoking the process to execute the first SQL statement.
- the bytecode compiled from statements in the JAVA frame 432 is executed by the JVM 121 .
- the stack 530 next includes SQL frame 532 representing the first SQL statement 533 , which is being executed by an SQL virtual machine 122 , not the JAVA virtual machine 121 .
- the SQL statement 533 is compiled into coded instructions having one or more basic SQL operations before being executed by the SQL virtual machine. For purposes of illustration, it is assumed that the execution of the SQL statement 533 triggers the execution of the PL/SQL routine R by a PL/SQL virtual machine 123 .
- the stack 530 next includes PL/SQL frame 472 representing the executed statements 462 , 463 , 464 of PL/SQL routine R up to the invocation of the JAVA routine S.
- the coded instructions compiled from statements in the routine R are executed by the PL/SQL virtual machine 123 .
- the stack 530 next includes SQL frame 534 representing the second SQL statement 535 , which is being executed by an SQL virtual machine 122 , not by the JVM 121
- the second SQL statement is the breakpoint so that no further frames are on the stack.
- Ellipsis 538 represents subsequent frames that would appear on the stack if the breakpoint were in another routine directly or indirectly invoked as a result of executing the second SQL statement.
- a user can easily determine the contents of variables in routines Q, R, S and in the first and second SQL statements at the time the breakpoint statement is executed.
- the user can also set the contents of those variables to different values.
- the user can also cause one of the virtual machines to execute the next instruction in the program.
- the user would ordinarily execute a second debugger client (not shown) that communicates with the SQL virtual machine 122 and a third debugger (not shown) that communicates with the PL/SQL virtual machine.
- the SQL frames may then be represented in a graphical user interface of the second debugger client.
- the PL/SQL frames may then be represented in a graphical user interface of the third debugger client.
- the user would switch back and forth among the first debugger client 102 , the second debugger client and the third debugger client to debug across the boundaries between routines of the three different languages. Such switching is slow and tedious and increases the risk the user may make an error in trying to debug the program.
- none of the debugger clients explicitly indicate the relative sequence of the frames among the three stacks.
- the unifying process 142 is interposed between a single debugger client and the virtual machines of multiple languages, as in embodiments with multiple instances of the same virtual machine.
- the unifying process 142 manages debugging information related to the frames of the stacks associated with multiple virtual machines for multiple languages, and the unifying process interleaves the information to reference a single stack that is presented to the user at a single debugger client.
- the unifying process 142 manages debugging information for JAVA frames 432 , 452 associated with bytecode interpreted by the JVM 121 .
- the unifying process 142 manages debugging information for SQL frames 532 , 534 associated with coded instructions interpreted by the SQL virtual machine 122 .
- the unifying process 142 manages debugging information for PL/SQL frame 472 associated with coded instructions interpreted by the PL/SQL virtual machine 123 .
- the unifying process interleaves this information to reference the stack 530 of frames as shown in FIG. 5 ; and sends the interleaved debugging information to a single debugger client 102 .
- the debugger client 102 presents the debugging information to the user in the context of the unified stack of FIG. 5 .
- the unifying process uses an interface for a single language to exchange information with the debugger client.
- the unifying process appears to the debugger client to be a single virtual machine that interprets the coded instructions of all languages.
- the unifying process 142 uses JDWP for data exchanges with the debugger client process 102 ; and, the unifying process 142 appears to the debugger client 102 to be a JVM that interprets the coded instructions from JAVA, SQL and PL/SQL modules.
- the unifying process performs the methods illustrated in FIG. 6A , FIG. 6B , FIG. 6C and FIG. 6D to interleave debugging information from multiple virtual machines for multiple languages.
- steps are illustrated in these figures and subsequent flowcharts in a particular order, in other embodiments, the steps may be executed in a different order or overlapping in time or omitted altogether.
- FIG. 6A is a flowchart illustrating at a high level a method for debugging a computer program having multiple modules executed by multiple virtual machines according to an embodiment.
- a user executes a debugger client to provide controls for the user to manage the debugging operations and to present debugging context and results to the user.
- the user executes debugger client 102 on the user's workstation, which is the host 104 . Any debugger client may be used.
- step 610 the user executes the multi-module program in debug mode.
- Each virtual machine is configured to exchange information with a debugger client when executed in the debug mode.
- a user establishes a connection to a database server to execute a multi-module program stored in the database.
- the connection setup includes data indicating that the particular debugger client 102 is running on the particular workstation 104 on the network.
- the user connects to a database server using a Web browser process (not shown) on the user's workstation 104 .
- the Web browser is well known in the art of network communications and communicates according to the standard hypertext transfer protocol (HTTP).
- HTTP hypertext transfer protocol
- the debugger client process 102 is identified as a process listening on a particular port or socket on the host 104 .
- the debugger client is identified in one message to the database server from the browser and stored thereafter on the user's workstation 104 in a persistent file, called a cookie, as is well known in the art.
- a database user may instead connect to the database server through any database-oriented protocol known in the art, such as JDBC, the Open Database Connectivity (ODBC), the Oracle Call Interface (OCI), the Universal Database Call Level Interface (CLI), among others.
- JDBC Open Database Connectivity
- OCI Oracle Call Interface
- CLI Universal Database Call Level Interface
- an operating system environmental variable is set to indicate that the debugger client is waiting on the host 104 at a particular port.
- the program code run in a virtual machine may also include statements that explicitly connect or disconnect the virtual machine from the debugger client.
- a unifying process is launched to mitigate between the debugger client 102 and one or more virtual machines that are instantiated to execute the multi-module program.
- Any manner known in the art to have virtual machines communicate with the unifying process and to have the unifying process communicate with the debugger client may be employed.
- the database server or the operating system responds to a communication indicating the host address and port of the debugger client 102 by launching the unifying process on a particular host to respond to messages on one or more particular ports. Steps to launch the unifying process include passing to the unifying process the host and port of the debugger client 102 .
- the database server or operating system that instantiates a virtual machine directs each virtual machine instantiated to send debugging information to the unifying process.
- the cookie or the operating system environmental variable is reset to indicate the host and a port of the unifying process.
- the unifying process may alternatively be embedded as part of a database server or other program which contains one or more virtual machines, communicating with the virtual machines in that program through a function call application programming interface (API) or through messages passed in program memory.
- API application programming interface
- a virtual machine is instantiated to execute coded instructions of a module of the program.
- the virtual machine is instantiated in debug mode with the host and port of the unifying process as the recipient of debug messages generated by the virtual machine. Any method for executing a virtual machine in debug mode may be employed.
- the virtual machine connects to the unifying process to receive debugging request information in one or more messages.
- debugging request information includes the breakpoints where execution is to be suspended.
- the debugging request information may include the identification of each requested variable object (variable object ID) whose contents are to be provided at the breakpoint.
- the virtual machine receives debugging request messages, which may also be called debug requests, with the debugging request information such as the breakpoints.
- the virtual machine executes up to the breakpoint, invoking routines in other modules as indicated by the coded instructions in the module being executed. If a breakpoint is reached, execution is suspended.
- a user may then send debug requests for one or more variable objects.
- the contents of the requested variable objects are sent to the unifying process in debugging information from the virtual machines, either automatically or upon a specific request from the unifying process.
- the virtual machine invokes a routine in a module executed by another virtual machine
- the other virtual machine is instantiated, as shown in step 616 .
- this routine causes invocation of another routine that is executed by a third virtual machine
- the third virtual machine is instantiated in step 618 .
- the virtual machine connects with the unifying process, receives any debug requests, and starts executing the invoked routine in the module the virtual machine is executing until a breakpoint is reached.
- FIG. 6A shows three virtual machines are instantiated, in other embodiments more or fewer virtual machines are instantiated.
- FIG. 6B is a flowchart illustrating an embodiment 620 of a method at a unifying process for debugging a computer program executed by multiple virtual machines based on a message from a debugger client.
- a debugging message is received at the unifying process from a debugger client.
- the message includes one or more operations, breakpoints or variable objects.
- the breakpoints are indicated by module identifiers and position indicators, such as module names and statement line numbers. It is assumed, for purposes of illustration, that module 440 is named “AtoQS” and that statement 444 occurs at a line number having a value “444.”
- variable objects and even frames are identified by one or more unique integers generated by the system, rather than by names.
- variable objects are indicated by an object ID, such as a module name, a routine name, and an object name or by a unique integer or set of integers.
- object ID such as a module name, a routine name, and an object name or by a unique integer or set of integers.
- the variable FirstCity is a user-define object including a city name, a province name, and a country name.
- FirstCity is defined as a private variable in the routine S of JAVA module 440 .
- a first request message sets the breakpoint
- a second request message specifies the variable after the client is notified that the breakpoint has been reached.
- the debug request message is a request to execute a single step, or a request to list all loaded classes, or a request to list the routines on the stack, or a request to list the IDs of the variable objects associated with each routine on the stack.
- a user can determine whether the value of the variable FirstCity changed from the time the SQL statement was submitted from the JAVA routine S until the time the SQL statement was executed by the SQL virtual machine.
- step 624 the unifying process determines the breakpoints or variable object IDs within modules executed by a “current” virtual machine of the multiple virtual machines. For purposes of illustration, it is assumed that program execution has already been halted at a breakpoint in routine R in the PL/SQL module being executed by the third virtual machine 123 . Routine R is triggered upon execution of the first SQL statement executed by the second virtual machine 122 . The first SQL statement is submitted by statement 424 of the routine Q being executed by the first virtual machine 121 . Thus, the first, second and third virtual machines have been instantiated at the time step 624 is performed in this example. One of the three virtual machines is made the current virtual machine and it is determined whether any breakpoints and variable object IDs are associated with that virtual machine.
- the first virtual machine is the JVM, which executes module 440 .
- Module 440 has a breakpoint to be set at line 440 in the example data received in step 623 .
- the second virtual machine is the SQL virtual machine and has a breakpoint upon exit of the submitted SQL statement in the example.
- the third virtual machine is the PL/SQL virtual machine, which does not have a breakpoint in the data received in step 623 in this example.
- step 626 the breakpoints and variable object IDs are translated from constructs of the language used by the debugger client to constructs of the language used by the current virtual machine.
- This step is omitted in embodiments in which the current virtual machine is modified to do such a translation, as described in more detail below with respect to FIG. 7 .
- This step is also omitted in embodiments in which the language used by the debugger client 102 is the language of the current virtual machine into which the breakpoint is submitted.
- This step is omitted in the example, because the debugger client is assumed to use the JDWP interface that employs JAVA constructs and the current virtual machine is the JVM that also uses JAVA constructs.
- a new debug message is generated for the current virtual machine.
- the modified debug request message is sent to the current virtual machine. For example, the modified debug request message is sent to the JVM 121 .
- step 632 it is determined in step 632 that the SQL virtual machine 122 is also instantiated, so the SQL virtual machine is made the current virtual machine and control passes to steps 624 through 630 to generate and send a modified debug request message for the SQL virtual machine 122 .
- a second modified debug request message is generated and sent to the SQL virtual machine 122 .
- the second modified debug request message includes data indicating the operation “get variable value on SQL exit,” the breakpoint “second SQL statement” and the variable “SQL.FirstCity.”
- no line numbers internal to an SQL statement are used as breakpoints, so that the only breakpoints are before entry and after exit from the SQL virtual machine.
- step 632 After making the SQL virtual machine the current virtual machine, on the next performance of step 632 , it is determined in step 632 that the PL/SQL virtual machine 123 is also instantiated, so the PL/SQL virtual machine is made the current virtual machine and control passes to steps 624 through 630 to generate and send a modified debug message for the PL/SQL virtual machine 123 .
- no modified debug request message is generated or sent to the PL/SQL virtual machine 123 .
- step 632 If it is determined in step 632 that there is no other virtual machines instantiated, processing of the debug message from the debugger client is complete, as indicated by the passing of control to step 635 to end the process.
- FIG. 6C and FIG. 6D make up a flowchart illustrating an embodiment 640 of a method at a unifying process for debugging a computer program executed by multiple virtual machines based on debugging information received from a virtual machine.
- step 641 a message is received from a virtual machine of the plurality of virtual machines with debugging information.
- the virtual machine that sends the message is a current virtual machine.
- the other instantiated virtual machines are waiting for the current virtual machine to finish processing and return control to one of the other virtual machines.
- the message may indicate the current virtual machine is completing execution of a routine, that the current virtual machine is beginning execution of a routine, that the current virtual machine has reached a breakpoint, or that the contents of one or more variable objects are being returned.
- the data are expressed in the language constructs of a different language than is used by the debugger client 102 .
- step 641 includes steps to translate the constructs of the different language to the constructs of the language used by the debugger client 102 . An example translation is described in more detail in a later section.
- step 642 it is determined whether the data indicates the current virtual machine is returning control to a calling routine that invoked the current routine. For example, the data indicates that the PL/SQL virtual machine 123 has completed execution of routine R and is returning control to routine Q that invoked routine R. If so, control passes to method 670 illustrated in FIG. 6D and described in more detail below with reference to FIG. 6D . If not, control passes to step 643 .
- step 643 data indicating the next routine to be executed or the current values of variable objects in the calling routine are determined from the message received from the current virtual machine.
- the values of variable objects are indicated explicitly.
- the data indicates only the object IDs of the variable objects for which values are maintained by the current virtual machine. The object ID may subsequently be used to retrieve the values of those objects from the virtual machine. The current values of some variable objects might not yet be defined.
- the debugging information may include the virtual machine's call stack and that call stack is determined in step 643 .
- step 643 data is obtained from a message from the JVM 121 , which indicates the next routine to be executed is submission of the second SQL statement.
- the values of variable objects in routine S, that submits the second SQL statement, are also indicated.
- the value of AtoQS.S.FirstCity is “Rome, N.Y., USA.”
- step 644 it is determined whether the next routine is in a module executed by the current virtual machine. If so, control passes to step 650 to add a frame representing the next routine to a stack of frames associated with the current virtual machine. For example, if the next routine were a routine X also executed by the JVM, control would pass to step 650 to add a frame for routine X to a stack for the JVM 121 . In some embodiments in which the virtual machine maintains its own call stack, step 650 may be omitted.
- the frame for the virtual machine also specifies the unique position of the call in the calling virtual machine.
- the current JVM executes the current routine S through the statement 444 that submits the second SQL statement.
- the second SQL statement is the next routine and is executed by the SQL virtual machine 122 different from the JVM 121 .
- Control passes to step 646 to receive data from the SQL virtual machine 122 indicating that execution of the second SQL statement by the SQL virtual machine 122 is beginning and to add the SQL frame to the call stack.
- step 648 the SQL virtual machine is made the current virtual machine.
- step 650 add a frame for the second SQL statement to the stack for the SQL virtual machine.
- step 650 is omitted because the frame is automatically added to a stack for the current virtual machine by the virtual machine itself, and the unifying process can request the stack from the virtual machine whenever that information is to be used.
- the frame for the next routine is added to a single stack maintained by the unifying process for all the routines executed for the multi-module program.
- SQL frame 534 is added to single frame stack 530 .
- the single frame stack 530 includes, above the SQL frame 534 , JAVA frame 452 for the JAVA routine S that submitted the second SQL statement.
- the single frame stack 530 includes, above the JAVA frame 452 , a PL/SQL frame 472 for the PL/SQL Routine R that invoked the JAVA routine S.
- the single frame stack 530 includes, above the PL/SQL frame 472 , a SQL frame 532 for the SQL statement that triggered the PL/SQL routine R.
- the single frame stack 530 includes, above the SQL frame 532 , a JAVA frame 432 for the JAVA Routine Q that submitted the first SQL statement. None of the stacks maintained by the individual virtual machines include all these frames.
- the values of the requested variables in the current routine are associated with the frame.
- the frame of the single stack can be associated with a frame in a virtual machine that maintains the values of all variables for the routine.
- the unifying process stores the variable object IDs and their values in association with the frame for all variable objects in the routine. In some embodiments, the unifying process stores only the values of the requested variable objects in the routine in association with the frame.
- the value of the variable object FirstCity when the SQL statement is entered is associated with the frame.
- the value of the FirstCity variable object is “Rome, N.Y., USA” at the entry point.
- the value of the variable FirstCity in the SQL frame at the time of reaching the breakpoint of exiting the SQL statement execution is associated with the frame.
- the value of the FirstCity variable object is “Rome, Latium, Italy” at the breakpoint.
- step 652 the next routine is made the current routine.
- the current routine For example, the second SQL statement is made the current routine.
- step 652 is omitted.
- step 654 it is determined whether the message is received while the current virtual machine is at a breakpoint. If not, processing of the message is complete as indicated by passing control to step 669 to end the process. For example, if the debug message is sent by the current virtual machine to indicate that the routine has started execution, but there is no breakpoint upon entry of the routine, control passes to step 669 .
- step 656 the unifying process receives data indicating values of variable objects in the current routine at the breakpoint.
- the data is provided automatically by the current virtual machine for all routines in the stack of the current virtual machine.
- the SQL virtual machine provides values for all variables associated with the first and second SQL statements in the stack of the SQL virtual machine.
- some or all of the information is obtained from the current virtual machine by requesting values from the virtual machine.
- the unifying process sends a message to the virtual machine requesting values for the requested variable objects from one or more of the routines in the stack maintained by the virtual machine.
- the unifying process already stores some or all of the information as a result of step 652 .
- the SQL virtual machine provides a value for the FirstCity variable object upon reaching the breakpoint.
- the value is “Rome, Latium, Italy.”
- the unifying process assembles data indicating values for all requested variable objects associated with routines in the single stack. For example, it is assumed that the user has also requested the value of the variable string “MonthAveraged” determined during execution of PL/SQL routine R at the time of execution of the breakpoint.
- the unifying process obtains the current value in the variable MonthAveraged associated with the stack for the PL/SQL virtual machine. In some embodiments, the value of MonthAveraged at the time of the break is obtained by requesting the value from the PL/SQL virtual machine 123 .
- the unifying process sends a message to the PL/SQL virtual machine requesting values for the MonthAveraged string from the stack maintained by the PL/SQL virtual machine 123 .
- the value is assumed to be “February.”
- the unifying process already stores some or all of the information as a result of step 652 .
- the unifying process finds the requested variable MonthAveraged in the single stack associated with the PL/SQL frame 472 and requests the value of the variable string MonthAveraged from the PL/SQL virtual machine 123 .
- the PL/SQL virtual machine sends the value “February” in response.
- the unifying process then generates data indicating the value “Rome, Latium, Italy” for the variable, user-defined object FirstCity and the value “February” for the variable string MonthAveraged.
- step 658 a check is made during step 658 to determine whether the debugging information has been received from all the virtual machines with requested data. If not, the unifying process ends for the processing of the message received in step 641 , passing control to step 669 . Essentially, the unifying process waits for additional messages with debugging information. If all the virtual machines with requested data have reported, control passes to step 660 .
- step 658 includes converting the format.
- the format is converted to JDWP.
- step 658 includes using the mapping to generate debugging information in the constructs of the language used by the debugger client.
- step 660 the data generated in step 658 is sent to the debugger client.
- the data indicating the value “Rome, Latium, Italy” for the variable, user-defined object FirstCity and the value “February” for the variable string MonthAveraged is sent to the debugger client 102 .
- data from several virtual machines are integrated and sent to the only debugger client.
- FIG. 6D illustrates an embodiment of a method performed when data received at the unifying process from a current virtual machine indicates the current virtual machine is returning control to a calling routine that invoked the current routine.
- step 672 data indicating that the current routine is returning control to the calling routine is obtained from the data received from the current virtual machine in step 641 .
- the data indicates that the current virtual machine, SQL virtual machine 123 , has completed execution of the second SQL statement and is returning control to the routine that submitted the second SQL statement.
- step 674 the most recent (last) routine frame is removed from the single stack.
- the remaining last frame i.e., the frame immediately above the removed frame, is the frame of the calling routine. Therefore, it is determined in step 674 , using the single stack, that the JAVA frame 452 is the frame of the calling routine.
- JAVA routine S is associated with the JAVA frame 453 ; thus, JAVA routine S is the calling routine.
- the values of variable objects associated with the removed frame are deleted. In embodiments in which the unifying process only maintains a stack of virtual machines, step 674 is omitted.
- step 676 the last frame is removed from the stack associated with the current virtual machine. For example, an SQL frame associated with the second SQL statement is removed from a stack for the SQL virtual machine. In some embodiments step 676 is omitted because the virtual machine maintains the stack for itself.
- step 678 the calling routine is made the current routine.
- the JAVA routine S becomes the current routine.
- step 680 it is determined whether the calling routine is in a module executed by the current virtual machine. If so, processing of the message from the virtual machine is complete, as represented by step 685 indicating that processing is done.
- step 682 data is received from the virtual machine that executes the current routine.
- the data indicates the virtual machine is continuing to execute the current routine at the point of return from the called routine.
- the data indicates that the JVM is continuing to execute the routine S at the point of return after submitting the second SQL statement.
- step 684 in response to receiving data in step 682 , the unifying process makes the virtual machine sending the data in step 682 the current virtual machine. This is done by removing the most recent (last) frame from the stack of virtual machine frames.
- the unifying process 142 drops the SQL frame 534 from the stack 530 and makes the JVM the current virtual machine. Processing is then completed as represented by passing control to step 685 .
- the unifying process maintains a single stack for all virtual machines (and in some embodiments, all routines executed by all virtual machines) for the multi-module program.
- the unifying process integrates the debugging information, such as breakpoints, variable object IDs, variable object values, time profile information, and tracing information for all the virtual machines. Meanwhile, the debugger communicates simply with the unifying process.
- the unifying process exchanges information with each virtual machine using an interface tailored for the language of the virtual machine.
- the unifying process uses a database management system debugging interface (DBMS_debug) for exchanging information with the PL/SQL virtual machine 123 , while also using the JDWP to exchange information with the JVM 121 .
- steps 626 and 641 of the unifying process methods include steps to translate debugging information between a format used to exchange debugging information with the debugger client 102 and a different format for a virtual machine of a different language.
- the unifying process translates debugging information between JDWP and DBMS_debug for passing debugging information between the debugger client 102 and the SQL virtual machine 122 or the PL/SQL virtual machine 123 .
- the translation to a common specified format is performed within one or more virtual machines instead of in the unifying process.
- a particular specified interface is used for exchanging data with the debugger client.
- the same specified interface is used for exchanging data between the unifying process and virtual machines for two or more languages.
- One or more virtual machines are modified to exchange debugging information using the specified interface.
- the SQL and PL/SQL virtual machines 122 , 123 are modified to exchange debugging information with the unifying process 142 using JDWP.
- all three virtual machines 121 , 122 , 123 exchange information with the unifying process using the same interface 152 b , as depicted in FIG. 1 .
- the JDWP allows the unifying process and the debugger client to be anywhere on the network, rather than having to be on the same host.
- the JDWP already works or is readily implemented in JVMs.
- the JDWP interface is already published; and several vendors already supply JDWP-compliant debugger clients.
- the unifying process is simpler to design, implement and maintain because it need not include a translator between JDWP and every other debugging interface for virtual machines.
- FIG. 7 is a block diagram illustrating a modified virtual machine, according to an embodiment.
- a virtual machine 722 is modified to include a language mapping process 756 .
- the mapping process maps language constructs used in the interface 154 a to different language constructs used in the modules interpreted by the virtual machine.
- a language construct indicates an element of the language or an element of the representation of the language at run time.
- a program unit is an example of a language construct. In different languages the program unit may be called a “module,” “class,” or “package,” among other terms.
- a routine defined within a program unit is another example of a language construct. In different languages the routine may be called a “function,” “procedure,” “method,” or “subroutine,” among other terms.
- a variable is another example of a language construct. Each language usually supports several variable types or scopes, such as “static variable,” “object fields,” “object attributes,” “local variables,” or “global variables,” among others.
- a type definition is another example of a language construct.
- Each language usually supports several types, such as “class,” “structure,” “array,” “variable array,” “table,” “record,” “integer,” “floating point,” or “character,” among others.
- a position within other language constructs is itself a language construct. In different languages the position might be specified as a statement number, a line number, or a program counter.
- the modified PL/SQL virtual machine 722 includes a PL/SQL mapping process 756 for use with an interface 154 a based on the JDWP.
- the mapping process 756 translates PL/SQL constructs to JAVA constructs for sending information out through the JDWP interface 154 a and translates JAVA constructs to PL/SQL constructs for receiving debugging information through the JDWP interface 154 a.
- modified virtual machine 722 can be used directly with any debugger client 102 using the specified interface, as well as with the unifying process using the specified interface.
- a modified PL/SQL virtual machine that maps PL/SQL to JAVA constructs for the JDWP can be used directly with a JDWP-compliant debugger client 102 .
- the unifying process can be omitted.
- the modified PL/SQL virtual machine 722 can exchange information directly with a JDWP-compliant debugger client 102 using the JDWP interface 152 a.
- FIG. 8 is a flowchart illustrating a method 800 for debugging a computer program having multiple language modules executed by multiple virtual machines according to an embodiment.
- a mapping is generated and stored.
- the mapping maps language constructs of an interface language, used at the interface between a virtual machine and a debugger client, to and from the language constructs of a different language.
- JDWP provides an interface that uses JAVA classes having methods and attributes, all named within a consistent namespace, as language constructs.
- JDWP provides an interface between a PL/SQL virtual machine and a debugger client, the language constructs of PL/SQL are mapped to language constructs of JAVA and the language constructs of JAVA are mapped to the language constructs of PL/SQL.
- An example mapping between PL/SQL and JAVA is provided in more detail in the following section.
- an interface-compliant debugging request is received for a first virtual machine.
- the first virtual machine executes coded instructions based on a module written in a different language than the interface language.
- the first virtual machine is the PL/SQL virtual machine 123 in embodiments in which the interface is JDWP for use with the JAVA language.
- a debugging request for the values of the variables in a routine associated with a frame of the PL/SQL virtual machine 123 is received.
- the first virtual machine for executing coded instructions based on a module written in the different language, generates debugging information for that module.
- the PL/SQL virtual machine 123 generates a value “February” for the variable string “MonthAveraged” defined in the PL/SQL module 460 in response to a request from a debugger client or a unifying process.
- the variable “MonthAveraged” has the value “February” in association with the frame in the PL/SQL stack for the routine R of the module “Averages” found in database belonging to SchemaB.
- step 870 the interface-compliant debugging information is sent to the unifying process.
- Step 870 is omitted in embodiments in which the mapping is performed within the unifying process, such as in step 626 and 641 described above.
- Step 870 , and the following steps 880 , 890 are omitted in embodiments in which all modules of the program are executed by the same instance of a virtual machine.
- the debugging information is inherently integrated and is sent directly to the debugger process in step 892 .
- variable object CITY FirstCity
- the debugging information is sent to the unifying process in step 880 because in the illustrated embodiment there are at least two virtual machines executing the code of the multi-module program.
- step 890 the unifying process integrates the debugging information as described above with reference to FIGS. 6C and 6D and so generates integrated, interface-compliant debugging information.
- step 892 the integrated, interface-compliant debugging information is sent to the debugger client, often from the unifying process. If only one instance of a virtual machine executes all the modules of the multi-module program, then the debugging information may be sent directly from the virtual machine to the debugger client, according to some embodiments.
- mapping is used in step 860 to translate PL/SQL program units into JAVA program units. It is assumed that the PL/SQL program unit is stored in a database under control of a particular database management system designated herein as “APDBMS” in which each database belongs to a schema and comprises multiple database objects.
- APDBMS database management system
- a program unit name is the name given to a program unit in PL/SQL.
- a program unit name is generated for a block.
- a program unit name for a first program unit defined inside a second program unit will concatenate the name of the of the first program unit to the name of the second program unit separated by a special symbol such as “$.”
- mapping is stored in step 810 and used in step 860 to translate PL/SQL and SQL data types into JAVA data types and back.
- Data types may be primitive or composite.
- JAVA classes are defined for each of the primitive types and reside in the $APDBMS namespace.
- the classes are declared final so that a debugger client need not expend resources querying for the class type at runtime.
- the attribute names in the classes have a leading underscore “_”.
- Runtime values for the attributes of the classes are always represented by an object of the java.lang.String class.
- the object contains a printable representation or approximation of the actual value of the PL/SQL or SQL variable or parameter. In the event that the variable or parameter is NULL in the SQL sense, the value will appear to be null in the JAVA sense.
- PL/SQL allows programmers to add constraints to variable declarations. Constraints are treated as runtime attributes of the JAVA classes defined for the primitive types.
- the primitive types are presented through JDWP as if they had been declared in JAVA by a “package $APDBMS.Builtin” declaration followed by the following code fragments.
- a PL/SQL boolean type is treated as a member of a BOOLEAN class defined using:
- PL/SQL integer, binary integer, natural, naturaln, positive, positiven and signtype types are treated as members of an PLS_INTEGER class defined using:
- PL/SQL number integer, int, smallint, decimal, numeric, and dec types are treated as members of a NUMBER class defined using:
- a PL/SQL date type is treated as a member of a DATE class defined using:
- PL/SQL string values for string types are converted to UTF-8, a standard character set well known in the art, when transported through JDWP. If a string value includes characters that cannot be represented in UTF-8, then the string value will not be accurate.
- PL/SQL varchar2, varchar, and string types are treated as members of a VARCHAR2 class defined using:
- PL/SQL nvarchar2 and nvarchar are treated as members of a NVARCHAR2 class defined using:
- a PL/SQL varchar2_any_cs type is treated as a member of a VARCHAR2_ANY_CS class defined using:
- a PL/SQL char type is treated as a member of a CHAR class defined using:
- a PL/SQL nchar type is treated as a member of a NCHAR class defined using:
- a PL/SQL char_any_cs type is treated as a member of a CHAR_ANY_CS class defined using:
- a PL/SQL long type is treated as a member of a LONG class defined using:
- a PL/SQL raw type is treated as a member of a RAW class defined using:
- a PL/SQL rowid type is treated as a member of a ROWID class defined using:
- a PL/SQL urowid type is treated as a member of a UROWID class defined using:
- a PL/SQL mislabel type is treated as a member of a MLSLABEL class defined using:
- a PL/SQL clob type is treated as a member of a CLOB class defined using:
- a PL/SQL nclob type is treated as a member of a NCLOB class defined using:
- a PL/SQL clob_any_cs type is treated as a member of a CLOB_ANY_CS class defined using:
- a PL/SQL blob type is treated as a member of a BLOB class defined using:
- a PL/SQL bfile type is treated as a member of a BFILE class defined using:
- PL/SQL cursor types are treated as members of a CURSOR class and refcursor types are treated as members of a REFCURSOR class, which are not shown in the illustrated embodiment.
- REF object type REF
- type info domain
- surrogate locator string UTL_REF.
- the REF class contains no attributes in the illustrated embodiment, but attributes may be added in other embodiments.
- a SQL ref type is treated as a member of a REF class defined using:
- An exception type is not used internally in PL/SQL.
- An exception class is provided so that a user may set breakpoints on exceptions, and for exception reporting when an exception event occurs or when a ThreadReferenc.Stop is applied.
- the EXCEPTION class is defined using:
- a user exception class is provided to match any user-defined exceptions.
- the EXCEPTION_USER class is defined using:
- EXCEPTION_USER extends EXCEPTION ⁇ ⁇
- a DBMS exception class is provided to match any DBMS errors.
- the EXCEPTION_DBMS class is defined using:
- EXCEPTION_DBMS extends EXCEPTION ⁇ ⁇
- EXCEPTION_DBMS_n extends EXCEPTION_DBMS ⁇ ⁇
- JAVA classes appear through JDWP for each PL/SQL composite type, whether declared in PL/SQL or formed with an SQL “create type” statement.
- the “_type” attribute of the class holds a value that provides information about the category of the type.
- the category is selected from a list that includes “record,” “object,” “varray,” “nested array,” and “indexed table,” constructs well known to PL/SQL programmers. Attribute names for record and object types are based on the type declarations in the PL/SQL code with a leading underscore to reduce the likelihood of name collisions
- JDWP is represented over JDWP as if it had been declared in JAVA as
- Varrays and nested tables are seen through JDWP as a class having a JAVA array.
- Varrays include an attribute named “_limit” indicating a declared maximum size, but nested tables do not.
- the “_type” attribute is set either to “varray” or “nested table”.
- the implied JAVA class includes a method named “newElement,” which can be invoked with ObjectReference.InvokeMethod, to add rows to the collection.
- the method is a function that returns a value of the number of rows in the array after adding the row. No provision is made for deleting elements.
- JDWP is represented over JDWP as if it had been declared in JAVA as
- Indexed tables are sparse arrays that are seen through JDWP as a nested class defining each element plus a wrapper class having a JAVA array of the elements.
- Each element includes a key and a value.
- PL/SQL does not allow indexed tables to be atomically null, so no null information is used in the wrapper class. The value in an element may be null but the key may not.
- the implied JAVA class includes two methods named “newElement” and “deleteElement,” which can be invoked with ObjectReference.InvokeMethod.
- the method newElement adds an element at the specified key, unless an element with that key already exists.
- the method deleteElement deletes an element at the specified key, unless the element with that key does not exist.
- JDWP is represented over JDWP as if it had been declared in JAVA as
- Associative arrays are handled similarly. One difference is that the “_key” field is as declared by the user's code. Another difference is that the value of the “_type” field is “associative array.”
- An SQL statement appears through JDWP as the execution of a method $APDBMS.SQL.execution.
- the internal steps and variables of this method are not further broken down into frames and are not available for setting breakpoints or values for variables. Only breakpoints on method entry and method exit are accepted.
- This method appears to have two local variables, “_statement” and “_binds”.
- the “_statement” variable is of type java.lang.String, and includes the text of the SQL statement being executed. However, if the debugger client does not have sufficient privilege to see the statement, the variable contains another value, such as the text “not available.”
- the “_binds” variable is an array of elements.
- Each element appears to be an instance of a JAVA class that has two attributes “_name” and “_value.”
- the “_name” attribute is of type java.lang.String.
- the “_value” attribute is of the type “object.” The variables are read only; attempts to set values for these variables are ignored.
- FIG. 9 is a block diagram of a hierarchical system of unifiers for unifying debugging information from multiple tiers of virtual machines according to an embodiment.
- the multi-tiered embodiments are described in the context of an application interacting with a database server of a database management system, but the invention is not limited to this context.
- An application program executing on an application host 960 provides a service over a network.
- the application program is an accounting program.
- the program modules 970 stored on the application host 960 perform the application specific functions.
- the application makes requests to a database server executing on a database server host 910 .
- first, second and third virtual machines 121 , 122 , 123 reside on the database server host 910 for running the modules 930 stored in the database.
- a unifying process 142 executes on the database server host 910 to unify the debugging information from the first, second and third virtual machines, 121 , 122 , 123 .
- the unifying processes 142 , 942 serve to generate a coordinated picture of debugging information that is presented to the user by the debugger client 102 .
- the first unifying process 142 coordinates the debugging information for virtual machines 121 , 122 , 123
- the second unifying process 942 coordinates the debugging information for the first unifying process 142 and the fourth virtual machine 924 .
- the network address of the second unifying process 942 is conveyed to the first unifying process 142 .
- the debugging information sent from the first unifying process 142 is forwarded to the second unifying process 942 instead of to the debugger client 102 .
- the information is passed during step 610 described above, and in step 612 the unifying process 142 connects to the second unifying process 942 instead of to the debugger client 102 .
- unifying processes may be deployed at two or more levels of a hierarchy.
- FIG. 10 is a block diagram that illustrates a computer system 1000 upon which an embodiment of the invention may be implemented.
- Computer system 1000 includes a bus 1002 or other communication mechanism for communicating information, and a processor 1004 coupled with bus 1002 for processing information.
- Computer system 1000 also includes a main memory 1006 , such as a random access memory (RAM) or other dynamic storage device, coupled to bus 1002 for storing information and instructions to be executed by processor 1004 .
- Main memory 1006 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 1004 .
- Computer system 1000 further includes a read only memory (ROM) 1008 or other static storage device coupled to bus 1002 for storing static information and instructions for processor 1004 .
- ROM read only memory
- a storage device 1010 such as a magnetic disk or optical disk, is provided and coupled to bus 1002 for storing information and instructions.
- Computer system 1000 may be coupled via bus 1002 to a display 1012 , such as a cathode ray tube (CRT), for displaying information to a computer user.
- a display 1012 such as a cathode ray tube (CRT)
- An input device 1014 is coupled to bus 1002 for communicating information and command selections to processor 1004 .
- cursor control 1016 is Another type of user input device
- cursor control 1016 such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 1004 and for controlling cursor movement on display 1012 .
- This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.
- Non-volatile media includes, for example, optical or magnetic disks, such as storage device 1010 .
- Volatile media includes dynamic memory, such as main memory 1006 .
- Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 1002 . Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.
- Computer system 1000 also includes a communication interface 1018 coupled to bus 1002 .
- Communication interface 1018 provides a two-way data communication coupling to a network link 1020 that is connected to a local network 1022 .
- communication interface 1018 may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line.
- ISDN integrated services digital network
- communication interface 1018 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN.
- LAN local area network
- Wireless links may also be implemented.
- communication interface 1018 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.
- Computer system 1000 can send messages and receive data, including program code, through the network(s), network link 1020 and communication interface 1018 .
- a server 1030 might transmit a requested code for an application program through Internet 1028 , ISP 1026 , local network 1022 and communication interface 1018 .
- the received code may be executed by processor 1004 as it is received, and/or stored in storage device 1010 , or other non-volatile storage for later execution. In this manner, computer system 1000 may obtain application code in the form of a carrier wave.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
-
- a package named PackageA belonging to schema SchemaB is mapped to a JAVA package called $APDBMS.package.SchemaB.PackageA;
- a procedure named ProcP belonging to schema SchemaB is mapped to a JAVA package called $APDBMS.procedure.SchemaB.P ProcP;
- a procedure named ProcC belonging to package PackageA is mapped to a JAVA package called $APDBMS.packagebody.SchemaB.PackageA.ProcC;
- a function FuncD defined inside procedure ProcC is mapped to a JAVA package called $APDBMS.packagebody.SchemaB.PackageA.ProcC$FuncD; and
- an anonymous block running in schema SchemaB is mapped to a JAVA package called $APDBMS.block.SchemaB.1234, where 1234 is an arbitrary designation generated by the mapping process.
-
- final boolean _canBeNull; // Can this object be set to null?
-
- final int _maxvalue; // Largest legal value
-
- final int _scale; // Scale “constraint”
-
- final boolean _canBeNull;
-
- final int _length;
-
- final int _maxLength;
-
- final int _maxLength;
-
- final int _maxLength;
-
- static final int _maxLength;
-
- static final int _maxLength;
-
- APDBMS .type. SchemaA. PERSON
-
- type personRec is record (name varchar2(100), age pls_integer);
-
- . . .
-
- $APDBMS.Builtin.VARCHAR2 NAME;
- $APDBMS.Builtin.PLS_INTEGER AGE;
- static final String_type=“record”;
-
- create type SchemaB.PERSON as object (name varchar2(100), age pls_integer, “is Null” boolean);
is represented over JDWP as if it had been declared in JAVA as
- create type SchemaB.PERSON as object (name varchar2(100), age pls_integer, “is Null” boolean);
-
- boolean _is Null
- $APDBMS.Builtin.VARCHAR2 NAME;
- $APDBMS.Builtin.PLS_INTEGER AGE;
- $APDBMS.Builtin.BOOLEAN isNull;
- final boolean _canBeNull;
- static final String _type=“object”;
-
- type V is varray (10) of number;
-
- . . .
-
- final V$element _values[ ];
- static final int _limit=10;
- final boolean _canBeNull;
- static final String _type=“varray”;
- public int newElement( );
- final public class V$element
- {
- final $APDBMS.Builtin.PLS_INTEGER _key;
- $APDBMS.Builtin.Number _value;
- }
-
- type Indexedtablel is table of pls_integer index by binary_integer;
-
- . . .
-
- final INDEXEDTABLEI$element_values[ ];
- static final String_type=“indexed table”;
- public int newElement(int key);
- public void deleteElement(int key);
- final public class INDEXEDTABLEI$element
- {
- final $APDBMS.Builtin.PLS_INTEGER_key;
- $APDBMS.Builtin.PLS_INTEGER _value;
- }
Claims (28)
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/143,890 US7350194B1 (en) | 2001-09-24 | 2002-05-10 | Techniques for debugging computer programs involving multiple computing machines |
US12/022,076 US8321838B2 (en) | 2001-09-24 | 2008-01-29 | Techniques for debugging computer programs involving multiple computing machines |
US13/436,836 US8799863B2 (en) | 2001-09-24 | 2012-03-31 | Techniques for debugging computer programs involving multiple computing machines |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US32472201P | 2001-09-24 | 2001-09-24 | |
US10/143,890 US7350194B1 (en) | 2001-09-24 | 2002-05-10 | Techniques for debugging computer programs involving multiple computing machines |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/022,076 Continuation US8321838B2 (en) | 2001-09-24 | 2008-01-29 | Techniques for debugging computer programs involving multiple computing machines |
Publications (1)
Publication Number | Publication Date |
---|---|
US7350194B1 true US7350194B1 (en) | 2008-03-25 |
Family
ID=39199359
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/143,890 Expired - Lifetime US7350194B1 (en) | 2001-09-24 | 2002-05-10 | Techniques for debugging computer programs involving multiple computing machines |
US12/022,076 Active 2025-04-20 US8321838B2 (en) | 2001-09-24 | 2008-01-29 | Techniques for debugging computer programs involving multiple computing machines |
US13/436,836 Expired - Lifetime US8799863B2 (en) | 2001-09-24 | 2012-03-31 | Techniques for debugging computer programs involving multiple computing machines |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/022,076 Active 2025-04-20 US8321838B2 (en) | 2001-09-24 | 2008-01-29 | Techniques for debugging computer programs involving multiple computing machines |
US13/436,836 Expired - Lifetime US8799863B2 (en) | 2001-09-24 | 2012-03-31 | Techniques for debugging computer programs involving multiple computing machines |
Country Status (1)
Country | Link |
---|---|
US (3) | US7350194B1 (en) |
Cited By (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060015853A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Method and apparatus for on demand debugging, tracing, and logging of applications |
US20060129988A1 (en) * | 2004-12-01 | 2006-06-15 | Microsoft Corporation | Distributed debugger environment |
US20060259947A1 (en) * | 2005-05-11 | 2006-11-16 | Nokia Corporation | Method for enforcing a Java security policy in a multi virtual machine system |
US20070168975A1 (en) * | 2005-12-13 | 2007-07-19 | Thomas Kessler | Debugger and test tool |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US20080032668A1 (en) * | 2003-12-23 | 2008-02-07 | Cuihtlauac Alvarado | Telecommunication Terminal Comprising Two Execution Spaces |
US20080141222A1 (en) * | 2001-09-24 | 2008-06-12 | Oracle International Corporation | Techniques For Debugging Computer Programs Involving Multiple Computing Machines |
US20080243969A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for customizing allocation statistics |
US20080244547A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for integrating profiling and debugging |
US20080244531A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for generating a hierarchical tree representing stack traces |
US20080243968A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for object age detection in garbage collection heaps |
US20080244546A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for providing on-demand profiling infrastructure for profiling at virtual machines |
US20090193129A1 (en) * | 2008-01-26 | 2009-07-30 | Puneet Agarwal | Systems and Methods for Fine Grain Policy Driven Cookie Proxying |
US20090249250A1 (en) * | 2008-04-01 | 2009-10-01 | Oracle International Corporation | Method and system for log file processing and generating a graphical user interface based thereon |
US20090307652A1 (en) * | 2008-06-10 | 2009-12-10 | Microsoft Corporation | Automatic model-specific debugger extensions |
US20100005455A1 (en) * | 2008-07-03 | 2010-01-07 | International Business Machines Corporation | Managing software dependencies during software testing and debugging |
US20100095280A1 (en) * | 2007-03-30 | 2010-04-15 | Ralf Schmelter | Method and system for providing loitering trace in virtual machines |
US20100250225A1 (en) * | 2009-03-31 | 2010-09-30 | International Business Machines Corporation | Date and time simulation for time-sensitive applications |
US20100313186A1 (en) * | 2009-06-04 | 2010-12-09 | Microsoft Corporation | Developer-managed debugger data records |
US20110035201A1 (en) * | 2005-02-25 | 2011-02-10 | Synopsys, Inc. | Method for dynamically adjusting speed versus accuracy of computer platform simulation |
US20110061042A1 (en) * | 2009-09-09 | 2011-03-10 | Oracle International Corporation | Synchronized java debugger |
US7925694B2 (en) | 2007-10-19 | 2011-04-12 | Citrix Systems, Inc. | Systems and methods for managing cookies via HTTP content layer |
US20110119043A1 (en) * | 2005-02-25 | 2011-05-19 | Coware, Inc. | Interface converter for unified view of multiple computer system simulations |
US20110138359A1 (en) * | 2009-12-09 | 2011-06-09 | Oracle International Corporation | Modified implementation of java debug wire protocol |
US8336029B1 (en) * | 2007-11-08 | 2012-12-18 | Google Inc. | Debugger connection |
US8484465B1 (en) * | 2010-12-08 | 2013-07-09 | Google Inc. | Heterogeneous virtual machines sharing a security model |
US20140053036A1 (en) * | 2012-08-15 | 2014-02-20 | Scott P. Nixon | Debugging multiple exclusive sequences using dsm context switches |
US8667471B2 (en) | 2007-03-30 | 2014-03-04 | Sap Ag | Method and system for customizing profiling sessions |
US20140282543A1 (en) * | 2013-03-15 | 2014-09-18 | Ologn Technologies Ag | Secure zone on a virutal machine for digital communications |
US20150052405A1 (en) * | 2013-08-16 | 2015-02-19 | Mark Maiolani | Data bus network interface module and method therefor |
US9432348B2 (en) | 2012-04-20 | 2016-08-30 | Ologn Technologies Ag | Secure zone for secure purchases |
US9742735B2 (en) | 2012-04-13 | 2017-08-22 | Ologn Technologies Ag | Secure zone for digital communications |
CN107210931A (en) * | 2015-01-02 | 2017-09-26 | 希斯泰克公司 | Control architecture |
US9948640B2 (en) | 2013-08-02 | 2018-04-17 | Ologn Technologies Ag | Secure server on a system with virtual machines |
US10108953B2 (en) | 2012-04-13 | 2018-10-23 | Ologn Technologies Ag | Apparatuses, methods and systems for computer-based secure transactions |
US10303493B2 (en) * | 2016-11-04 | 2019-05-28 | International Business Machines Corporation | Performance acceleration in mixed-language applications |
US10366227B2 (en) * | 2016-11-15 | 2019-07-30 | International Business Machines Corporation | Secure debugging in a trustable computing environment |
US10725890B1 (en) * | 2017-07-12 | 2020-07-28 | Amazon Technologies, Inc. | Program testing service |
US11176546B2 (en) | 2013-03-15 | 2021-11-16 | Ologn Technologies Ag | Systems, methods and apparatuses for securely storing and providing payment information |
US11340935B2 (en) * | 2008-10-22 | 2022-05-24 | Vmware, Inc. | Methods and systems for converting a related group of physical machines to virtual machines |
US12141799B2 (en) | 2023-09-11 | 2024-11-12 | Fingon Llc | Systems, methods and apparatuses for securely storing and providing payment information |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7051324B2 (en) * | 2003-01-16 | 2006-05-23 | International Business Machines Corporation | Externalized classloader information for application servers |
US20070162897A1 (en) * | 2006-01-12 | 2007-07-12 | International Business Machines Corporation | Apparatus and method for profiling based on call stack depth |
US7735069B2 (en) * | 2006-02-09 | 2010-06-08 | International Business Machines Corporation | Creating software debug breakpoints activated by specific call patterns |
US9317636B1 (en) | 2006-12-11 | 2016-04-19 | Synopsys, Inc. | System and method for stopping integrated circuit simulation |
US8423959B1 (en) * | 2006-12-11 | 2013-04-16 | Synopsys, Inc. | Techniques for coordinating and controlling debuggers in a simulation environment |
US20130024844A1 (en) * | 2006-12-27 | 2013-01-24 | The Mathworks, Inc. | Continuous evaluation of program code and saving state information associated with program code |
US9645915B2 (en) | 2006-12-27 | 2017-05-09 | The Mathworks, Inc. | Continuous evaluation of program code and saving state information associated with program code |
US8156473B2 (en) * | 2007-06-01 | 2012-04-10 | Sap Ag | Model oriented debugging |
US8448130B1 (en) * | 2007-08-20 | 2013-05-21 | The Mathworks, Inc. | Auto-generated code validation |
JP5269067B2 (en) * | 2008-03-14 | 2013-08-21 | パナソニック株式会社 | Program execution device and control method thereof |
US20100057865A1 (en) * | 2008-09-04 | 2010-03-04 | International Business Machines Corporation | Transferable Debug Session in a Team Environment |
US8140832B2 (en) * | 2009-01-23 | 2012-03-20 | International Business Machines Corporation | Single step mode in a software pipeline within a highly threaded network on a chip microprocessor |
US8799877B2 (en) * | 2009-03-27 | 2014-08-05 | Optumsoft, Inc. | Interpreter-based program language translator using embedded interpreter types and variables |
US9111036B2 (en) * | 2010-04-30 | 2015-08-18 | Red Hat, Inc. | Preloading unwind data for non-intrusive backtracing |
JP5458708B2 (en) * | 2009-07-09 | 2014-04-02 | 株式会社リコー | Image processing apparatus, display control method, and display control program |
US8701088B2 (en) * | 2010-05-28 | 2014-04-15 | Red Hat, Inc. | Generating backtracing information for software debugging of software programs running on virtual machines |
US8572578B2 (en) | 2010-06-15 | 2013-10-29 | Microsoft Corporation | Script debugging |
US8572579B2 (en) | 2010-08-19 | 2013-10-29 | Oracle International Corporation | Break on next called function or method in java debugger agent |
US8904356B2 (en) | 2010-10-20 | 2014-12-02 | International Business Machines Corporation | Collaborative software debugging in a distributed system with multi-member variable expansion |
US8671393B2 (en) * | 2010-10-21 | 2014-03-11 | International Business Machines Corporation | Collaborative software debugging in a distributed system with client-specific dynamic breakpoints |
US9009673B2 (en) | 2010-10-21 | 2015-04-14 | International Business Machines Corporation | Collaborative software debugging in a distributed system with collaborative step over operation |
US8972945B2 (en) | 2010-10-21 | 2015-03-03 | International Business Machines Corporation | Collaborative software debugging in a distributed system with client-specific access control |
US20120117041A1 (en) * | 2010-11-08 | 2012-05-10 | Verisign, Inc. | Debugging a stored procedure in a database |
US8990775B2 (en) | 2010-11-10 | 2015-03-24 | International Business Machines Corporation | Collaborative software debugging in a distributed system with dynamically displayed chat sessions |
US8850397B2 (en) | 2010-11-10 | 2014-09-30 | International Business Machines Corporation | Collaborative software debugging in a distributed system with client-specific display of local variables |
US9411709B2 (en) | 2010-11-10 | 2016-08-09 | International Business Machines Corporation | Collaborative software debugging in a distributed system with client-specific event alerts |
US8966319B2 (en) * | 2011-02-22 | 2015-02-24 | Apple Inc. | Obtaining debug information from a flash memory device |
US8806438B2 (en) | 2011-04-20 | 2014-08-12 | International Business Machines Corporation | Collaborative software debugging in a distributed system with variable-specific messages |
US8656360B2 (en) | 2011-04-20 | 2014-02-18 | International Business Machines Corporation | Collaborative software debugging in a distributed system with execution resumption on consensus |
US8739127B2 (en) | 2011-04-20 | 2014-05-27 | International Business Machines Corporation | Collaborative software debugging in a distributed system with symbol locking |
US8572438B2 (en) * | 2011-06-24 | 2013-10-29 | Microsoft Corporation | N-way runtime interoperative debugging |
US8756577B2 (en) | 2011-06-28 | 2014-06-17 | International Business Machines Corporation | Collaborative software debugging in a distributed system with private debug sessions |
US9069895B2 (en) * | 2013-01-15 | 2015-06-30 | International Business Machines Corporation | Analyzing concurrent debugging sessions |
CN103150202B (en) * | 2013-03-15 | 2017-04-19 | 汉柏科技有限公司 | Method for allowing CloudStack to be compatible with virtual machine existing in vCenter |
US9104798B2 (en) * | 2013-05-03 | 2015-08-11 | International Business Machines Corporation | Enabling remote debugging of virtual machines running in a cloud environment |
US9117019B2 (en) * | 2013-07-26 | 2015-08-25 | Sap Se | Debugging remote software applications across WAN connections |
US9053228B1 (en) | 2013-10-22 | 2015-06-09 | The Mathworks, Inc. | Determining when to evaluate program code and provide results in a live evaluation programming environment |
US9658942B2 (en) | 2015-04-02 | 2017-05-23 | International Business Machines Corporation | Dynamic tracing framework for debugging in virtualized environments |
US10379979B2 (en) * | 2017-05-31 | 2019-08-13 | Western Digital Technologies, Inc. | Power fail handling using stop commands |
US10353723B2 (en) * | 2017-08-03 | 2019-07-16 | Salesforce.Com, Inc. | PL/SQL language parsing at a virtual machine |
GB201808519D0 (en) | 2018-05-24 | 2018-07-11 | Undo Ltd | Debugging Systems |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5247676A (en) | 1989-06-29 | 1993-09-21 | Digital Equipment Corporation | RPC based computer system using transparent callback and associated method |
US5371746A (en) | 1991-05-31 | 1994-12-06 | Fuji Xerox Co., Ltd. | Program debugging system for a distributed data processing system |
US5430876A (en) | 1989-06-27 | 1995-07-04 | Digital Equipment Corporation | Remote procedure callback system and method |
US5457797A (en) | 1993-08-03 | 1995-10-10 | Forte Software, Inc. | Flexible multi-platform partitioning for computer applications |
US5787245A (en) | 1995-11-13 | 1998-07-28 | Object Technology Licensing Corporation | Portable debugging service utilizing a client debugger object and a server debugger object |
US5794047A (en) | 1994-09-29 | 1998-08-11 | International Business Machines Corporation | Method of walking-up a call stack for a client/server program that uses remote procedure call |
US5818445A (en) | 1992-09-09 | 1998-10-06 | Tandem Computers Incorporated | Method and system for creating computer-program-based applications with developer specified look and feel |
US5901315A (en) * | 1997-06-13 | 1999-05-04 | International Business Machines Corporation | Method for debugging a Java application having native method dynamic load libraries |
US6026362A (en) * | 1995-09-11 | 2000-02-15 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US6126328A (en) | 1997-02-28 | 2000-10-03 | Oracle Corporation | Controlled execution of partitioned code |
US6314429B1 (en) | 1997-10-08 | 2001-11-06 | Mitel Corporation | Bi-directional conversion library |
US6353923B1 (en) * | 1997-03-12 | 2002-03-05 | Microsoft Corporation | Active debugging environment for debugging mixed-language scripting code |
US6826746B2 (en) * | 2001-03-08 | 2004-11-30 | International Business Machines Corporation | Debugger probe for object oriented programming |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5361352A (en) * | 1989-11-27 | 1994-11-01 | Hitachi, Ltd. | Method for debugging in a parallel computer system and system for the same |
GB2268817B (en) * | 1992-07-17 | 1996-05-01 | Integrated Micro Products Ltd | A fault-tolerant computer system |
US5325530A (en) * | 1993-01-29 | 1994-06-28 | International Business Machines Corporation | Controller for sequential programming tools executed in a parallel computing environment |
US5440724A (en) * | 1993-06-17 | 1995-08-08 | Bull Hn Information Systems Inc. | Central processing unit using dual basic processing units and combined result bus and incorporating means for obtaining access to internal BPU test signals |
US5860009A (en) * | 1994-04-28 | 1999-01-12 | Kabushiki Kaisha Toshiba | Programming method for concurrent programs and program supporting apparatus thereof |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6721941B1 (en) * | 1996-08-27 | 2004-04-13 | Compuware Corporation | Collection of timing and coverage data through a debugging interface |
US6173414B1 (en) * | 1998-05-12 | 2001-01-09 | Mcdonnell Douglas Corporation | Systems and methods for reduced error detection latency using encoded data |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US7275246B1 (en) * | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US6412106B1 (en) * | 1999-06-16 | 2002-06-25 | Intervoice Limited Partnership | Graphical system and method for debugging computer programs |
US7254806B1 (en) * | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
US6772367B1 (en) * | 1999-10-13 | 2004-08-03 | Board Of Regents, The University Of Texas System | Software fault tolerance of concurrent programs using controlled re-execution |
US7072818B1 (en) * | 1999-11-30 | 2006-07-04 | Synplicity, Inc. | Method and system for debugging an electronic system |
US6477540B1 (en) * | 1999-12-22 | 2002-11-05 | Ncr Corporation | Method and apparatus for using Java as a stored procedure language and as an embedded language on a client |
US6704887B2 (en) * | 2001-03-08 | 2004-03-09 | The United States Of America As Represented By The Secretary Of The Air Force | Method and apparatus for improved security in distributed-environment voting |
DE10118502C1 (en) * | 2001-04-12 | 2002-08-08 | Siemens Ag | Process for the acquisition and recording of system information and processes in distributed concurrent component-based software systems |
US7350194B1 (en) * | 2001-09-24 | 2008-03-25 | Oracle Corporation | Techniques for debugging computer programs involving multiple computing machines |
US7107578B1 (en) * | 2001-09-24 | 2006-09-12 | Oracle International Corporation | Techniques for debugging computer programs involving multiple programming languages |
JP3946057B2 (en) * | 2002-03-01 | 2007-07-18 | 富士通株式会社 | Consistency inspection support method and consistency inspection support system |
US7043722B2 (en) * | 2002-07-31 | 2006-05-09 | Bea Systems, Inc. | Mixed language expression loading and execution methods and apparatuses |
US8020148B2 (en) * | 2002-09-23 | 2011-09-13 | Telefonaktiebolaget L M Ericsson (Publ) | Bi-directional probing and testing of software |
US7752599B2 (en) * | 2003-02-25 | 2010-07-06 | Bea Systems Inc. | Systems and methods extending an existing programming language with constructs |
WO2004104824A1 (en) * | 2003-05-26 | 2004-12-02 | Fujitsu Limited | User interface application development deice and development method |
US7249280B2 (en) * | 2004-06-18 | 2007-07-24 | Microsoft Corporation | Cheap paxos |
US7512934B2 (en) * | 2004-08-25 | 2009-03-31 | Microsoft Corporation | Parallel debugger |
US7634761B2 (en) * | 2004-10-29 | 2009-12-15 | Microsoft Corporation | Breakpoint logging and constraint mechanisms for parallel computing systems |
US7496895B1 (en) * | 2004-12-29 | 2009-02-24 | The Mathworks, Inc. | Multi-domain unified debugger |
US7774750B2 (en) * | 2005-07-19 | 2010-08-10 | Microsoft Corporation | Common concurrency runtime |
US8387034B2 (en) * | 2005-12-21 | 2013-02-26 | Management Services Group, Inc. | System and method for the distribution of a program among cooperating processing elements |
US8024708B2 (en) * | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US7823138B2 (en) * | 2006-11-14 | 2010-10-26 | Microsoft Corporation | Distributed testing for computing features |
US7836431B2 (en) * | 2007-01-22 | 2010-11-16 | Oracle International Corporation | Pipelining of input/output parameters between application tests written in a DBMS procedural language |
US8336029B1 (en) * | 2007-11-08 | 2012-12-18 | Google Inc. | Debugger connection |
US8423962B2 (en) * | 2009-10-08 | 2013-04-16 | International Business Machines Corporation | Automated test execution plan generation |
JP5404437B2 (en) * | 2010-01-13 | 2014-01-29 | 株式会社東芝 | Safety output device |
US8683440B2 (en) * | 2010-05-27 | 2014-03-25 | Red Hat Israel, Ltd. | Performing dynamic software testing based on test result information retrieved in runtime using test result entity |
US8826239B2 (en) * | 2010-10-06 | 2014-09-02 | International Business Machines Corporation | Asynchronous code testing in integrated development environment (IDE) |
US20120159444A1 (en) * | 2010-12-17 | 2012-06-21 | Microsoft Corporation | Fusing debug information from different compiler stages |
US8473916B2 (en) * | 2011-01-25 | 2013-06-25 | Verizon Patent And Licensing Inc. | Method and system for providing a testing framework |
US8756591B2 (en) * | 2011-10-03 | 2014-06-17 | International Business Machines Corporation | Generating compiled code that indicates register liveness |
US20130139185A1 (en) | 2011-11-30 | 2013-05-30 | Oracle International Corporation | Intercepting and tracing interface routine transactions |
-
2002
- 2002-05-10 US US10/143,890 patent/US7350194B1/en not_active Expired - Lifetime
-
2008
- 2008-01-29 US US12/022,076 patent/US8321838B2/en active Active
-
2012
- 2012-03-31 US US13/436,836 patent/US8799863B2/en not_active Expired - Lifetime
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5430876A (en) | 1989-06-27 | 1995-07-04 | Digital Equipment Corporation | Remote procedure callback system and method |
US5247676A (en) | 1989-06-29 | 1993-09-21 | Digital Equipment Corporation | RPC based computer system using transparent callback and associated method |
US5371746A (en) | 1991-05-31 | 1994-12-06 | Fuji Xerox Co., Ltd. | Program debugging system for a distributed data processing system |
US5818445A (en) | 1992-09-09 | 1998-10-06 | Tandem Computers Incorporated | Method and system for creating computer-program-based applications with developer specified look and feel |
US5457797A (en) | 1993-08-03 | 1995-10-10 | Forte Software, Inc. | Flexible multi-platform partitioning for computer applications |
US5802371A (en) | 1994-09-29 | 1998-09-01 | International Business Machines Corporation | Method of walking-up a call stack for a client/server program that uses remote procedure call |
US5794047A (en) | 1994-09-29 | 1998-08-11 | International Business Machines Corporation | Method of walking-up a call stack for a client/server program that uses remote procedure call |
US6026362A (en) * | 1995-09-11 | 2000-02-15 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US5787245A (en) | 1995-11-13 | 1998-07-28 | Object Technology Licensing Corporation | Portable debugging service utilizing a client debugger object and a server debugger object |
US6126328A (en) | 1997-02-28 | 2000-10-03 | Oracle Corporation | Controlled execution of partitioned code |
US6353923B1 (en) * | 1997-03-12 | 2002-03-05 | Microsoft Corporation | Active debugging environment for debugging mixed-language scripting code |
US5901315A (en) * | 1997-06-13 | 1999-05-04 | International Business Machines Corporation | Method for debugging a Java application having native method dynamic load libraries |
US6314429B1 (en) | 1997-10-08 | 2001-11-06 | Mitel Corporation | Bi-directional conversion library |
US6826746B2 (en) * | 2001-03-08 | 2004-11-30 | International Business Machines Corporation | Debugger probe for object oriented programming |
Non-Patent Citations (6)
Title |
---|
"MicrosoftC/C++ Version 7.0, Environment and Tools For MS-DOS and Windows Operating Systems", Microsoft Corporation, 1991, pp. 393-398. |
Antonio Corradi et al., "Error Recovery Mechanisms for Remote Procedure Call-Based Systems", IEEE, 1989, pp. 502-507. |
Charles A. Meyer et al., "Design and Test Strategies for a Safety-Critical Embedded Executive", ACM, Dec. 1996, pp. 29-37. |
Helge Behrends, "Simulation-based Debugging of Active Databases", IEEE, Feb. 1994, pp. 172-180. |
Johnson, M., "A Software Debugging Glossary" (1981) Hewlett Packard. |
Klaus-Peter Lohr et al., "DAPHNE-Support for Distributed Applications Programming in Heterogeneous Computer Networks", IEEE, pp. 63-71, 1988. |
Cited By (95)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080141222A1 (en) * | 2001-09-24 | 2008-06-12 | Oracle International Corporation | Techniques For Debugging Computer Programs Involving Multiple Computing Machines |
US8321838B2 (en) * | 2001-09-24 | 2012-11-27 | Oracle International Corporation | Techniques for debugging computer programs involving multiple computing machines |
US8799863B2 (en) | 2001-09-24 | 2014-08-05 | Oracle International Corporation | Techniques for debugging computer programs involving multiple computing machines |
US20080032668A1 (en) * | 2003-12-23 | 2008-02-07 | Cuihtlauac Alvarado | Telecommunication Terminal Comprising Two Execution Spaces |
US7865724B2 (en) * | 2003-12-23 | 2011-01-04 | France Telecom | Telecommunication terminal comprising two execution spaces |
US7581211B2 (en) * | 2004-07-14 | 2009-08-25 | International Business Machines Corporation | Method and apparatus for on demand debugging, tracing, and logging of applications |
US20060015853A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Method and apparatus for on demand debugging, tracing, and logging of applications |
US7634759B2 (en) * | 2004-12-01 | 2009-12-15 | Microsoft Corporation | Distributed debugger environment |
US20060129988A1 (en) * | 2004-12-01 | 2006-06-15 | Microsoft Corporation | Distributed debugger environment |
US8793115B2 (en) | 2005-02-25 | 2014-07-29 | Synopsys, Inc. | Interface converter for unified view of multiple computer system simulations |
US8903703B2 (en) | 2005-02-25 | 2014-12-02 | Synopsys, Inc. | Dynamically adjusting speed versus accuracy of computer platform simulation |
US8484006B2 (en) * | 2005-02-25 | 2013-07-09 | Synopsys, Inc. | Method for dynamically adjusting speed versus accuracy of computer platform simulation |
US20110119043A1 (en) * | 2005-02-25 | 2011-05-19 | Coware, Inc. | Interface converter for unified view of multiple computer system simulations |
US20110035201A1 (en) * | 2005-02-25 | 2011-02-10 | Synopsys, Inc. | Method for dynamically adjusting speed versus accuracy of computer platform simulation |
US20060259947A1 (en) * | 2005-05-11 | 2006-11-16 | Nokia Corporation | Method for enforcing a Java security policy in a multi virtual machine system |
US20070168975A1 (en) * | 2005-12-13 | 2007-07-19 | Thomas Kessler | Debugger and test tool |
US20070179955A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for providing authorized remote access to a computing environment provided by a virtual machine |
US20070180448A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session |
US8341732B2 (en) | 2006-01-24 | 2012-12-25 | Citrix Systems, Inc. | Methods and systems for selecting a method for execution, by a virtual machine, of an application program |
US8117314B2 (en) * | 2006-01-24 | 2012-02-14 | Citrix Systems, Inc. | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US8051180B2 (en) | 2006-01-24 | 2011-11-01 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine executing in a terminal services session and hosting a requested computing environment |
US8355407B2 (en) | 2006-01-24 | 2013-01-15 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US20070192329A1 (en) * | 2006-01-24 | 2007-08-16 | Citrix Systems, Inc. | Methods and systems for executing, by a virtual machine, an application program requested by a client machine |
US8010679B2 (en) | 2006-01-24 | 2011-08-30 | Citrix Systems, Inc. | Methods and systems for providing access to a computing environment provided by a virtual machine executing in a hypervisor executing in a terminal services session |
US20070180493A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for assigning access control levels in providing access to resources via virtual machines |
US8341270B2 (en) | 2006-01-24 | 2012-12-25 | Citrix Systems, Inc. | Methods and systems for providing access to a computing environment |
US20070180450A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for selecting a method for execution, by a virtual machine, of an application program |
US7954150B2 (en) | 2006-01-24 | 2011-05-31 | Citrix Systems, Inc. | Methods and systems for assigning access control levels in providing access to resources via virtual machines |
US20070180449A1 (en) * | 2006-01-24 | 2007-08-02 | Citrix Systems, Inc. | Methods and systems for providing remote access to a computing environment provided by a virtual machine |
US20070174429A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
US7870153B2 (en) | 2006-01-24 | 2011-01-11 | Citrix Systems, Inc. | Methods and systems for executing, by a virtual machine, an application program requested by a client machine |
US20070174410A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for incorporating remote windows from disparate remote desktop environments into a local desktop environment |
US7949677B2 (en) | 2006-01-24 | 2011-05-24 | Citrix Systems, Inc. | Methods and systems for providing authorized remote access to a computing environment provided by a virtual machine |
US20070171921A1 (en) * | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and systems for interacting, via a hypermedium page, with a virtual machine executing in a terminal services session |
US20100095280A1 (en) * | 2007-03-30 | 2010-04-15 | Ralf Schmelter | Method and system for providing loitering trace in virtual machines |
US8601469B2 (en) | 2007-03-30 | 2013-12-03 | Sap Ag | Method and system for customizing allocation statistics |
US7904493B2 (en) | 2007-03-30 | 2011-03-08 | Sap Ag | Method and system for object age detection in garbage collection heaps |
US8522209B2 (en) * | 2007-03-30 | 2013-08-27 | Sap Ag | Method and system for integrating profiling and debugging |
US8356286B2 (en) * | 2007-03-30 | 2013-01-15 | Sap Ag | Method and system for providing on-demand profiling infrastructure for profiling at virtual machines |
US7971010B2 (en) | 2007-03-30 | 2011-06-28 | Sap Ag | Mechanism for performing loitering trace of objects that cause memory leaks in a post-garbage collection heap |
US20080243969A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for customizing allocation statistics |
US20080244547A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for integrating profiling and debugging |
US20080244531A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for generating a hierarchical tree representing stack traces |
US20080244546A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for providing on-demand profiling infrastructure for profiling at virtual machines |
US8667471B2 (en) | 2007-03-30 | 2014-03-04 | Sap Ag | Method and system for customizing profiling sessions |
US20080243968A1 (en) * | 2007-03-30 | 2008-10-02 | Sap Ag | Method and system for object age detection in garbage collection heaps |
US8336033B2 (en) * | 2007-03-30 | 2012-12-18 | Sap Ag | Method and system for generating a hierarchical tree representing stack traces |
US7925694B2 (en) | 2007-10-19 | 2011-04-12 | Citrix Systems, Inc. | Systems and methods for managing cookies via HTTP content layer |
US8336029B1 (en) * | 2007-11-08 | 2012-12-18 | Google Inc. | Debugger connection |
US20130014086A1 (en) * | 2007-11-08 | 2013-01-10 | Google Inc. | Debugger connection |
US8843895B2 (en) * | 2007-11-08 | 2014-09-23 | Google Inc. | Debugger connection |
US8090877B2 (en) | 2008-01-26 | 2012-01-03 | Citrix Systems, Inc. | Systems and methods for fine grain policy driven cookie proxying |
US20090193129A1 (en) * | 2008-01-26 | 2009-07-30 | Puneet Agarwal | Systems and Methods for Fine Grain Policy Driven Cookie Proxying |
US9059966B2 (en) | 2008-01-26 | 2015-06-16 | Citrix Systems, Inc. | Systems and methods for proxying cookies for SSL VPN clientless sessions |
US8769660B2 (en) | 2008-01-26 | 2014-07-01 | Citrix Systems, Inc. | Systems and methods for proxying cookies for SSL VPN clientless sessions |
US20090249250A1 (en) * | 2008-04-01 | 2009-10-01 | Oracle International Corporation | Method and system for log file processing and generating a graphical user interface based thereon |
US9098626B2 (en) * | 2008-04-01 | 2015-08-04 | Oracle International Corporation | Method and system for log file processing and generating a graphical user interface based thereon |
US10169199B2 (en) * | 2008-06-10 | 2019-01-01 | Microsoft Technology Licensing, Llc | Automatic model-specific debugger extensions |
US20090307652A1 (en) * | 2008-06-10 | 2009-12-10 | Microsoft Corporation | Automatic model-specific debugger extensions |
US9594670B2 (en) * | 2008-07-03 | 2017-03-14 | International Business Machines Corporation | Managing software dependencies during software testing and debugging |
US20100005455A1 (en) * | 2008-07-03 | 2010-01-07 | International Business Machines Corporation | Managing software dependencies during software testing and debugging |
US11868797B2 (en) | 2008-10-22 | 2024-01-09 | Vmware, Inc. | Methods and systems for converting a related group of physical machines to virtual machines |
US11340935B2 (en) * | 2008-10-22 | 2022-05-24 | Vmware, Inc. | Methods and systems for converting a related group of physical machines to virtual machines |
US8418151B2 (en) * | 2009-03-31 | 2013-04-09 | International Business Machines Corporation | Date and time simulation for time-sensitive applications |
US8352922B2 (en) * | 2009-03-31 | 2013-01-08 | International Business Machines Corporation | Date and time simulation for time-sensitive applications |
US20120185690A1 (en) * | 2009-03-31 | 2012-07-19 | International Business Machines Corporation | Date and time simulation for time-sensitive applications |
US20100250225A1 (en) * | 2009-03-31 | 2010-09-30 | International Business Machines Corporation | Date and time simulation for time-sensitive applications |
US20100313186A1 (en) * | 2009-06-04 | 2010-12-09 | Microsoft Corporation | Developer-managed debugger data records |
US9552277B2 (en) * | 2009-09-09 | 2017-01-24 | Oracle International Corporation | Synchronized java debugger |
US20110061042A1 (en) * | 2009-09-09 | 2011-03-10 | Oracle International Corporation | Synchronized java debugger |
US20110138359A1 (en) * | 2009-12-09 | 2011-06-09 | Oracle International Corporation | Modified implementation of java debug wire protocol |
US8572569B2 (en) * | 2009-12-09 | 2013-10-29 | Oracle International Corporation | Modified implementation of a debugger wire protocol and command packet |
US9135461B1 (en) | 2010-12-08 | 2015-09-15 | Google Inc. | Heterogeneous virtual machines sharing a security model |
US8484465B1 (en) * | 2010-12-08 | 2013-07-09 | Google Inc. | Heterogeneous virtual machines sharing a security model |
US10027630B2 (en) | 2012-04-13 | 2018-07-17 | Ologn Technologies Ag | Secure zone for digital communications |
US10484338B2 (en) | 2012-04-13 | 2019-11-19 | Ologn Technologies Ag | Secure zone for digital communications |
US9742735B2 (en) | 2012-04-13 | 2017-08-22 | Ologn Technologies Ag | Secure zone for digital communications |
US10108953B2 (en) | 2012-04-13 | 2018-10-23 | Ologn Technologies Ag | Apparatuses, methods and systems for computer-based secure transactions |
US10904222B2 (en) | 2012-04-13 | 2021-01-26 | Ologn Technologies Ag | Secure zone for digital communications |
US9432348B2 (en) | 2012-04-20 | 2016-08-30 | Ologn Technologies Ag | Secure zone for secure purchases |
US11201869B2 (en) | 2012-04-20 | 2021-12-14 | Ologn Technologies Ag | Secure zone for secure purchases |
US10270776B2 (en) | 2012-04-20 | 2019-04-23 | Ologn Technologies Ag | Secure zone for secure transactions |
US20140053036A1 (en) * | 2012-08-15 | 2014-02-20 | Scott P. Nixon | Debugging multiple exclusive sequences using dsm context switches |
US20140282543A1 (en) * | 2013-03-15 | 2014-09-18 | Ologn Technologies Ag | Secure zone on a virutal machine for digital communications |
US11176546B2 (en) | 2013-03-15 | 2021-11-16 | Ologn Technologies Ag | Systems, methods and apparatuses for securely storing and providing payment information |
US11763301B2 (en) | 2013-03-15 | 2023-09-19 | Ologn Technologies Ag | Systems, methods and apparatuses for securely storing and providing payment information |
US9948640B2 (en) | 2013-08-02 | 2018-04-17 | Ologn Technologies Ag | Secure server on a system with virtual machines |
US9552279B2 (en) * | 2013-08-16 | 2017-01-24 | Nxp Usa, Inc. | Data bus network interface module and method therefor |
US20150052405A1 (en) * | 2013-08-16 | 2015-02-19 | Mark Maiolani | Data bus network interface module and method therefor |
CN107210931B (en) * | 2015-01-02 | 2020-09-29 | 希斯泰克公司 | Control infrastructure |
CN107210931A (en) * | 2015-01-02 | 2017-09-26 | 希斯泰克公司 | Control architecture |
US10303493B2 (en) * | 2016-11-04 | 2019-05-28 | International Business Machines Corporation | Performance acceleration in mixed-language applications |
US10366227B2 (en) * | 2016-11-15 | 2019-07-30 | International Business Machines Corporation | Secure debugging in a trustable computing environment |
US10725890B1 (en) * | 2017-07-12 | 2020-07-28 | Amazon Technologies, Inc. | Program testing service |
US12141799B2 (en) | 2023-09-11 | 2024-11-12 | Fingon Llc | Systems, methods and apparatuses for securely storing and providing payment information |
Also Published As
Publication number | Publication date |
---|---|
US8321838B2 (en) | 2012-11-27 |
US8799863B2 (en) | 2014-08-05 |
US20080141222A1 (en) | 2008-06-12 |
US20120192154A1 (en) | 2012-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7350194B1 (en) | Techniques for debugging computer programs involving multiple computing machines | |
US7107578B1 (en) | Techniques for debugging computer programs involving multiple programming languages | |
US6571232B1 (en) | System and method for browsing database schema information | |
US6108664A (en) | Object views for relational data | |
US6496833B1 (en) | System and method for generating code for query object interfacing | |
US5937409A (en) | Integrating relational databases in an object oriented environment | |
US6279008B1 (en) | Integrated graphical user interface method and apparatus for mapping between objects and databases | |
US6236997B1 (en) | Apparatus and method for accessing foreign databases in a heterogeneous database system | |
RU2441273C2 (en) | Architecture of display with maintenance of increment representation | |
US7289997B1 (en) | System and method for an extensible metadata driven application framework | |
US6243709B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
US7340745B2 (en) | Systems and methods for mapping API calls | |
US20090077091A1 (en) | System for development and hosting of network applications | |
US6112207A (en) | Apparatus and method which features linearizing attributes of an information object into a string of bytes for object representation and storage in a database system | |
US6044216A (en) | Method and apparatus for implementing cursor variables for accessing data from database | |
US20030093433A1 (en) | Method and system for software application development and customizible runtime environment | |
WO1997048039A1 (en) | System and method for relational to object mapping | |
US8015217B2 (en) | Method and system for obtaining user data having user-defined data types | |
US11093492B1 (en) | System and method of fetching data from an external program | |
US11940951B2 (en) | Identification and import of metadata for extensions to database artefacts | |
WO1999033004A1 (en) | An integrated graphical user interface method and apparatus for mapping between objects and databases | |
EP1040432B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
US7058620B1 (en) | Cross-platform subselect metadata extraction | |
CN113626423A (en) | Log management method, device and system of service database | |
US20240126727A1 (en) | Techniques for comprehensively supporting json schema in a rdbms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: ORACLE CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ALPERN, DAVID M.;REEL/FRAME:012898/0620 Effective date: 20020510 |
|
AS | Assignment |
Owner name: ORACLE INTERNATIONAL CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ORACLE CORPORATION;REEL/FRAME:013944/0938 Effective date: 20030411 Owner name: ORACLE INTERNATIONAL CORPORATION,CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ORACLE CORPORATION;REEL/FRAME:013944/0938 Effective date: 20030411 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
CC | Certificate of correction | ||
FPAY | Fee payment |
Year of fee payment: 4 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 12TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1553); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 12 |
|
AS | Assignment |
Owner name: ALTER DOMUS (US) LLC, ILLINOIS Free format text: SECURITY INTEREST;ASSIGNOR:F45 TRAINING PTY LTD;REEL/FRAME:062697/0322 Effective date: 20230214 |