Embodiments of the invention relate generally to the field of software debugging. More particularly, embodiments of the invention relate to the field of debugging software remotely.
One of the most important parts of the software development process is the process of debugging. Debugging refers to the process of identifying and eliminating errors within a software program. A debugging application program, called a debugger, provides tools to assist a programmer in locating and correcting program errors. For instance, most debuggers provide tools for stepping through the executing code of a program, monitoring the status of input/output ports, and for monitoring and modifying the contents of memory locations and central processing unit registers.
Traditionally, a debugger must be run directly on the computer system that is executing the software that is being debugged. This, however, greatly hinders the software debugging process because the programmer performing the debugging must be in close proximity to the system being debugged. Other systems allow the debugging of one computer through another computer connected via a serial cable. However, these systems also require that the programmer be in relatively close proximity to the system being debugged. This may be extremely inconvenient when it is necessary to debug a computer system that is located across the country or even the world.
It is with respect to these considerations and others that the various embodiments of the present invention have been made.
In accordance with the present invention, the above and other problems are solved by methods and systems for remotely debugging a software program. These systems and methods make use of one or more operating system independent video and input/output redirection devices that allow remote control of the computer system from any network-connected location. By using such redirection devices, a computer system may be debugged from virtually anywhere in the world.
In accordance with other aspects, the present invention relates to a system for debugging a computer program executing on a computer (the “remote computer”) located remotely from another computer (the “local computer”). The remote computer is connected to a network, such as a local area network (“LAN”) or the Internet, and includes an operating system independent video and input/output redirection device (referred to herein as a “redirection device”). The redirection device is operative to transmit the video output of the remote computer to the local computer via the network connection.
The redirection device can also receive user input commands provided at the local computer and provide the input commands to the remote computer as if the input commands were physically generated by a user at the remote computer. In this manner, a user of the local computer can control the operation of the remote computer from a remote location, regardless of the type of operating system utilized by the remote computer.
The remote computer also includes a software program to be debugged, such as a basic input/output system (“BIOS”), and a debugger program. The local computer includes a remote control software application, such as a plug-in executing within a World Wide Web (“Web”) browser, operative to receive and display the video output transmitted from the remote computer. The remote control application also receives user input commands, such as keyboard or mouse commands, received at the local computer and transmits the commands to the redirection device. In this manner, the remote control application may be utilized to execute commands on the debugger application and to debug the software program executing on the remote computer.
In accordance with other aspects, the invention relates to a method for debugging a computer program executing on a remote computer from a local computer. According to the method, the remote computer executes a computer program to be debugged and a debugger application. The video output of the remote computer, including the screen display generated by the debugger application, is transmitted to the remote computer. The video output of the remote computer, including the screen display generated by the debugger application, is then displayed at the local computer.
User input commands may be received at the local computer directed to the screen display generated by the debugger application. The user input commands are then transmitted from the local computer to the remote computer and executed at the remote computer to control the operation of the debugger application. The user input commands are executed at the remote computer as if the commands were physically generated at the remote computer by one or more input devices physically connected to the remote computer.
Aspects of the invention may be implemented as a computer process, a computing system, or as an article of manufacture such as a computer program product or computer-readable medium. The computer program product may be a computer storage media readable by a computer system and encoding a computer program of instructions for executing a computer process. The computer program product may also be a propagated signal on a carrier readable by a computing system and encoding a computer program of instructions for executing a computer process.
These and various other features as well as advantages, which characterize the present invention, will be apparent from a reading of the following detailed description and a review of the associated drawings.
As described briefly above, embodiments of the present invention provide methods and systems for remotely debugging a computer software program. In the following detailed description, references are made to the accompanying drawings that form a part hereof, and in which are shown by way of illustration specific embodiments or examples. These embodiments may be combined, other embodiments may be utilized, and structural changes may be made without departing from the spirit and scope of the present invention. The following detailed description is, therefore, not be taken in a limiting sense, and the scope of the present invention is defined by the appended claims and their equivalents.
Referring now to the drawings, in which like numerals represent like elements through the several figures, aspects of the present invention and the exemplary operating environment will be described.
Generally, program modules include routines, programs, components, data structures, and other types of structures that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the invention may be practiced with other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like. The invention may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.
Turning now to
The local computer 2 also includes a plug-in 7 for use in conjunction with the Web browser 6. As known to those skilled in the art, plug-ins may be created utilizing ACTIVEX technology from MICROSOFT CORPORATION, JAVA from SUN MICROSYSTEMS, or other similar technologies from other vendors, that allow special functions to be performed within a Web browser. In particular, the plug-in 7 executes in conjunction with the Web browser 6 and communicates with a redirection device 12 operating in conjunction with a remote computer 4. As will be described in greater detail below, the plug-in 7 receives screen displays from the redirection device 12 and displays them at the local computer 2. The plug-in 7 also receives user input commands, such as mouse or keyboard commands, from a user of the local computer 2 and transmits these commands to the redirection device 12. The redirection device 12 may then provide the commands to remote computer 4, where they may be executed on the remote computer 4 as if they were physically received via an input device connected directly to the remote computer 4.
The remote computer 4 also comprises a standard desktop or server computer system. The remote computer 4 is connected to the network 14 and is operative to execute a debugger application 10. As described briefly above, the debugger application 10 provides facilities for assisting a programmer in locating and correcting program errors within a computer program, such as the computer program 8. For instance, a debugger application, such as the debugger application 10, typically provide tools for stepping through the executing code of a program, monitoring the status of input/output ports, and for monitoring and modifying the contents of memory locations and central processing unit registers.
The remote computer 4 also supports the use of an operating system independent video and input/output redirection device (referred to herein as a “redirection device”). The redirection device receives the video output of the remote computer 4 and compresses the video output for transmission to the plug-in 7 executing on the local computer 2. The redirection device then transmits the compressed video output of the remote computer 4 to the plug-in 7 executing on the local computer 2 via the network connection. The plug-in 7 is operative to decompress the data stream and to display the video output of the remote computer 4 on the local computer 2. The displayed output may include screen displays generated by the debugger application 10 and/or the computer program 8.
The plug-in 7 is also operative to receive user input commands, such as mouse or keyboard commands, generated at the local computer 2 and to transmit the commands to the redirection device 12. The redirection device 12 can receive the user input commands from the plug-in 7 and provide the input commands to the remote computer 4 as if the input commands were physically generated by a user at the remote computer 4. In order to provide this functionality, the redirection device 12 may be physically and electrically connected to the input ports of the remote computer 4 (serial, Universal Serial Bus (“USB”), etc.). The redirection device 12 may also provide connections for user input devices located at the remote computer 4 and may pass through signals received at the user input devices to the remote computer 4. In this manner, user input commands generated by a user physically located at the remote computer 4 may be passed through to the remote computer 4.
Moreover, through the use of the plug-in 7 and the redirection device 12, a user of the local computer 2 can control the operation of the remote computer 4 from a remote location. In particular, a user of the local computer 2 can utilize the debugger application 10 on the remote computer 4. The debugger application 10 can then be utilized to debug the computer program 8. According to one embodiment of the invention, the computer program 8 comprises a basic input/output system (“BIOS”) utilized by the remote computer 4. However, the computer program 8 may comprise other types of computer programs, such as operating system programs, application programs, device drivers, and others.
It should be appreciated that the redirection device may comprise a device located internal to the remote computer 4 or an external device connected to the external connections of the remote computer 4. One example of an external redirection device comprises an external device that may be connected to the external video output of the remote computer 4, to the network 14, and to the user input devices located at the remote computer 4. Such a device is described in U.S. Pat. No. 7,260,624, entitled “Systems and Methods for Establishing Interaction Between A Local Computer and a Remote Computer”, which is assigned to the assignee of the instant patent application and expressly incorporated herein.
Another embodiment may comprise a redirection device that is integrated with the mainboard of the remote computer 4 or contained on an adapter card within the remote computer 4. Such a device is described in U.S. Pat. No. 6,825,846, entitled “Systems and Methods for Capturing Screen Displays From A Host Computing System for Display At A Remote Terminal”, which is also assigned to the assignee of the instant patent application and expressly incorporated herein. It should be appreciated that other types of redirection devices may also be utilized.
Referring now to
The local computer 2 also includes a plug-in 7 for use in conjunction with the Web browser 6. In particular, the plug-in 7 executes in conjunction with the Web browser 6 and communicates with a redirection device 12A operating in conjunction with a remote computer 4A. As in the system described above, the plug-in 7 receives screen displays from the redirection device 12A and displays them at the local computer 2. The plug-in 7 also receives user input commands, such as mouse or keyboard commands, from a user of the local computer 2 and transmits these commands to the redirection device 12A. The redirection device 12A may then provide the commands to remote computer 4A, where they may be executed on the remote computer 4A as if they were physically received via an input device connected directly to the remote computer 4A. Multiple instances of the Web browser 6 and the plug-in 7 may be utilized on the local computer 2 to communicate with other redirection devices, such as the redirection device 12B utilized by the remote computer 4B.
The remote computers 4A and 4B also comprises standard desktop or server computer systems. The remote computer 4A is connected to the network 14 and is operative to execute a debugger application 10. As described briefly above, the debugger application 10 provides facilities for assisting a programmer in locating and correcting program errors within a computer program, such as the computer program 8, executing on the remote computer 4B. In particular, the computer program 8 includes functionality for communicating with the debugger application over the communications link 15.
As shown in
According to one embodiment of the invention, the computer program 8 comprises a BIOS utilized by the remote computer 4B. The BIOS is configured to communicate with the debugger application 10 and to provide information regarding the execution of the BIOS. This information is transmitted from the computer program 8 to the debugger application 10 via the communications link 15. It should also be appreciated that the computer program 8 may be debugged utilizing the debugger application 10 without the use of the redirection device 12B at the remote computer 4B.
Referring now to
The mass storage device 34 is connected to the CPU 16 through a mass storage controller (not shown) connected to the bus 22. The mass storage device 34 and its associated computer-readable media, provide non-volatile storage for the computer 4. Although the description of computer-readable media contained herein refers to a mass storage device, such as a hard disk or CD-ROM drive, it should be appreciated by those skilled in the art that computer-readable media can be any available media that can be accessed by the computer 4.
By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media. Computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EPROM, EEPROM, flash memory or other solid state memory technology, CD-ROM, DVD, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by the computer.
According to various embodiments of the invention, the computer 4 may operate in a networked environment using logical connections to remote computers through a network 14, such as the Internet or a LAN. The computer 4 may connect to the network 14 through a network interface unit 18 connected to the bus 22. It should be appreciated that the network interface unit 18 may also be utilized to connect to other types of networks and remote computer systems. The computer 4 may also include an input/output controller 20 for receiving and processing input from a number of devices, including a keyboard, mouse, or electronic stylus (not shown in
The computer 4 also includes a redirection device 12. As described above, the redirection device may be internal or external to the computer 4. The redirection device receives and compresses the video output of the computer 4 for transmission over the network 14. The redirection device 12 also transmits the compressed screen displays to a plug-in 7 executing on a remotely located computer, where the data may be decompressed and displayed. Because the redirection device 12 is implemented in hardware, operation of the redirection device 12 is not dependent on the execution of a particular type of operating system 32. Moreover, because the redirection device 12 is implemented in hardware, the operating system 32 does not have to be loaded by the computer 4 for the screen displays of the computer 4 to be compressed and transmitted. In this manner, the computer 4 may be remotely controlled immediately after it is powered on and without the need to load any operating system.
As discussed briefly above, the redirection device also includes input/output ports for connecting peripheral input devices that would otherwise be connected to the computer 4. In particular, a mouse and keyboard (not shown in
Turning now to
The user interface window 42B includes a screen display generated by the computer program 8 executing on the remote computer 4B. In particular, as shown in
Turning now to
From block 506, the routine 500 continues to block 508, where user input commands are received at the local computer 2 that are directed to the display of the remote computer 4. The commands are received by the plug-in 7 and are transmitted to the redirection device 12 at block 510. The commands may then be passed by the redirection device 12 to the remote computer 4 for execution at the remote computer 4 as if the commands were received at input devices physically connected to the remote computer 4 at block 512. In particular, user input commands may be received at the local computer 2 directed to screen displays generated by the debugger application 10. The user interface commands may then be passed to the remote computer 4 and executed on the debugger application 10 as if the commands were generated by a user located physically proximate to the remote computer 4. In this manner, the debugger application 10 may be utilized to debug the computer program 8 from a remote location. From block 512, the routine 500 returns to block 502, where the above-described process repeats.
Referring now to FIGS. 2 and 6A-6B, an illustrative routine 600 will be described for controlling the operation of the system for remotely debugging a software program according to another embodiment of the invention. The routine 600 begins at block 602, where the computer program is executed on the remote computer 4B. The routine 600 then continues to block 604, where the communications link 15 is provided between the remote computers 4A and 4B. As described above, the communications link 15 allows the debugger application 10 to communicate with the computer program 8.
From block 604, the routine 600 continues to block 606 where the debugger application is executed on the remote computer 4A. The routine 600 continues to block 608, where the compressed video output of the remote computer 4A is transmitted by the redirection device 12A to one instance of the plug-in 7 executing on the local computer 2. The compressed video output is received by the plug-in 7 and displayed at the local computer 2 at block 610. The compressed video output of the remote computer 4B may also be transmitted to an instance of the plug-in 7 by the redirection device 12B. The video output of the remote computer 4B may then be displayed at the local computer 2, including any screen displays generated by the computer program 8. Similarly, user input commands directed toward the screen display provided by the remote computer 4B may be received at the local computer 2 and transmitted to the redirection device 12B. These commands may then be passed to the computer 4B by the redirection device 12B and executed on the application program 8 as if they were generated by user input devices connected directly to the remote computer 4B.
From block 610, the routine 600 continues to block 612, where user input is received at the local computer 2 intended for the remote computer 4A. The user input commands are then transmitted by the plug-in 7 to the redirection device 12A for execution on the remote computer 4A. At block 616, the user input commands are passed to the remote computer 4A from the redirection device 12A, where the commands are executed by the remote computer 4A as if they were received at user input devices physically connected to the remote computer 4A. In particular, the commands may be utilized to control the operation of the debugger application 10 for use in debugging the computer program 8. From block 616, the routine 600 returns to block 602.
Based on the foregoing, it should be appreciated that the various embodiments of the invention provide methods and systems for remotely debugging a software program. The above specification, examples and data provide a complete description of the manufacture and use of the composition of the invention. Since many embodiments of the invention can be made without departing from the spirit and scope of the invention, the invention resides in the claims hereinafter appended.
Number | Name | Date | Kind |
---|---|---|---|
4589068 | Heinen, Jr. | May 1986 | A |
4979074 | Morley et al. | Dec 1990 | A |
5228039 | Knoke et al. | Jul 1993 | A |
5388252 | Dreste et al. | Feb 1995 | A |
5455933 | Schieve et al. | Oct 1995 | A |
5491743 | Shiio et al. | Feb 1996 | A |
5615331 | Toorians et al. | Mar 1997 | A |
5625410 | Washino et al. | Apr 1997 | A |
5630049 | Cardoza et al. | May 1997 | A |
5732212 | Perholtz et al. | Mar 1998 | A |
5777874 | Flood et al. | Jul 1998 | A |
5815653 | You et al. | Sep 1998 | A |
5819093 | Davidson et al. | Oct 1998 | A |
5850562 | Crump et al. | Dec 1998 | A |
5878158 | Ferris et al. | Mar 1999 | A |
5953451 | Syeda-Mahmood | Sep 1999 | A |
5990852 | Szamrej | Nov 1999 | A |
6011920 | Edwards et al. | Jan 2000 | A |
6035059 | Kurosawa et al. | Mar 2000 | A |
6054676 | Wall et al. | Apr 2000 | A |
6055334 | Kato | Apr 2000 | A |
6065072 | Flath | May 2000 | A |
6119247 | House et al. | Sep 2000 | A |
6124811 | Acharya et al. | Sep 2000 | A |
6137455 | Duo | Oct 2000 | A |
6145088 | Stevens | Nov 2000 | A |
6170021 | Graf | Jan 2001 | B1 |
6219695 | Guttag et al. | Apr 2001 | B1 |
6243743 | Freeny | Jun 2001 | B1 |
6263373 | Cromer et al. | Jul 2001 | B1 |
6272562 | Scott et al. | Aug 2001 | B1 |
6304895 | Schneider et al. | Oct 2001 | B1 |
6330167 | Kobayashi | Dec 2001 | B1 |
6360250 | Anupam et al. | Mar 2002 | B1 |
6377461 | Ozmat et al. | Apr 2002 | B1 |
6378014 | Shirley | Apr 2002 | B1 |
6397256 | Chan et al. | May 2002 | B1 |
6414716 | Kawai | Jul 2002 | B1 |
6434003 | Roy et al. | Aug 2002 | B1 |
6476854 | Emerson et al. | Nov 2002 | B1 |
6552914 | Chang | Apr 2003 | B1 |
6560641 | Powderly et al. | May 2003 | B1 |
6603665 | Truong et al. | Aug 2003 | B1 |
6609034 | Behrens et al. | Aug 2003 | B1 |
6636929 | Frantz et al. | Oct 2003 | B1 |
6651120 | Chiba et al. | Nov 2003 | B2 |
6651190 | Worley et al. | Nov 2003 | B1 |
6662217 | Godfrey et al. | Dec 2003 | B1 |
6664969 | Emerson et al. | Dec 2003 | B1 |
6681250 | Thomas et al. | Jan 2004 | B1 |
6754891 | Snyder et al. | Jun 2004 | B1 |
6816963 | Krithivas et al. | Nov 2004 | B1 |
6820267 | Christensen et al. | Nov 2004 | B2 |
6959380 | Dake et al. | Oct 2005 | B2 |
6963425 | Nair et al. | Nov 2005 | B1 |
6993747 | Friedman | Jan 2006 | B1 |
7039229 | Lin et al. | May 2006 | B2 |
7165041 | Guheen et al. | Jan 2007 | B1 |
7231606 | Miller et al. | Jun 2007 | B2 |
7299463 | Brannock et al. | Nov 2007 | B2 |
20010027465 | Hammelbacher | Oct 2001 | A1 |
20010037366 | Webb et al. | Nov 2001 | A1 |
20020040418 | Bress et al. | Apr 2002 | A1 |
20020087949 | Golender et al. | Jul 2002 | A1 |
20020097234 | Sauber | Jul 2002 | A1 |
20020103882 | Johnston et al. | Aug 2002 | A1 |
20020174415 | Hines | Nov 2002 | A1 |
20020194403 | Pua et al. | Dec 2002 | A1 |
20020199035 | Christensen et al. | Dec 2002 | A1 |
20030035049 | Dickens et al. | Feb 2003 | A1 |
20030058248 | Hochmuth et al. | Mar 2003 | A1 |
20030083842 | Miller et al. | May 2003 | A1 |
20030110244 | Mondale | Jun 2003 | A1 |
20030156132 | Gn et al. | Aug 2003 | A1 |
20030177111 | Egendorf et al. | Sep 2003 | A1 |
20030200273 | Khanna et al. | Oct 2003 | A1 |
20030226015 | Neufeld et al. | Dec 2003 | A1 |
20040059782 | Sivertsen | Mar 2004 | A1 |
20040158614 | Williams | Aug 2004 | A1 |
20040190773 | Messer et al. | Sep 2004 | A1 |
20040255276 | Rovang | Dec 2004 | A1 |
20050066000 | Liaw et al. | Mar 2005 | A1 |
20050086670 | Christensen et al. | Apr 2005 | A1 |
20060189900 | Flaherty | Aug 2006 | A1 |
20060195042 | Flaherty | Aug 2006 | A1 |
Number | Date | Country | |
---|---|---|---|
20040243883 A1 | Dec 2004 | US |