This application contains subject matter which is related to the subject matter of the following applications, each of which is assigned to the same assignee as this application and filed on the same day as this application. Each of the below listed applications is hereby incorporated herein by reference in its entirety:
“Facilitating The Use Of Aliases During The Debugging Of Applications,” Baker et al., Ser. No. 10/099,849, filed herewith; and
“Facilitating the Debugging of Applications By Employing User Defined or Redefined Symbols,” Baker et al., Ser. No. 10/099,286, filed herewith.
This invention relates, in general, to processing within a computing environment, and in particular, to the generating of symbol tables used during, for instance, the debugging of computer applications.
Computer applications are created using programming languages. These programming languages include human-readable text, which is translated by a compiler to generate machine-readable instructions. In particular, the compiler translates each line of the programming language into a sequence of machine-readable instructions, which perform the logical task described by the line of programming language code.
During the course of programming, errors may occur due to programmer error. These errors include either syntax errors or logic errors. Syntax errors are caught by the compiler, which refuses to generate machine instructions for a line of programming language that it does not understand. Logic errors are caught by detecting that the program does not perform as expected, often resulting in program exceptions or incorrect behavior. While syntax errors can be corrected by determining the correct syntax, logic errors are often much more difficult to ascertain. For this reason, a special class of computer programs has been developed. These programs are called debuggers. One example of a debugger is described in U.S. Pat. No. 4,636,940, entitled “Logic Analyzer Using Source Programs Or Other User Defined Symbols In The Trace Specification And The Trace Listing”, issued Jan. 13, 1987, which is hereby incorporated herein by reference in its entirety. A debugger allows the user to trace through the users' own program, while it is executing on the computer, to determine the instance or instances where the logical flow of the program is incorrectly designed.
A debugger uses debugging information to debug the state of variables at runtime. This debugging information is generated by the compiler and describes how the variables of the application are stored and what fields the variables contain. One example of a technique used by a compiler to generate this debugging information is described in U.S. Pat. No. 5,715,460, entitled “Template Based Facility For Formatting Compiler Output”, issued Feb. 3, 1998, which is hereby incorporated herein by reference in its entirety.
The amount of space required to store the debugging information can become large, particularly if a large number of variables are used or if the variables contain a large number of fields. When many programs are compiled with debugging information, the storage size required to keep these applications in a debuggable state can become onerous. The ability to reduce the amount of space used to store the debugging information is, therefore, desirable.
Several techniques have been employed in an effort to reduce the amount of debugging information. Examples of these techniques are described in, for instance, U.S. Pat. No. 6,226,786, entitled “Minimizing Debug Information For Global Types In Compiled Languages”, issued May 1, 2001; Japanese Patent No. JP10289109A, entitled “Compiling Control Method, Compiling Device and Recording Medium”, issued Oct. 17, 1998; and U.S. Pat. No. 5,680,622, entitled “System And Methods For Quickly Detecting Shareability Of Symbol And Type Information In Header Files”, issued Oct. 21, 1997, each of which is hereby incorporated herein by reference in its entirety. One or more of the techniques determine common information between application segments, which are linked or compiled together to create a single executable. The identification and use of the common information reduces the need for duplicative information, thereby reducing the amount of space used to store the debugging information.
However, a need still exists for a capability that facilitates a reduction in the amount of debugging information, and therefore, the amount of storage space, when applications are independent of one another. In particular, a need exists for the determination of common information for applications that are not linked, compiled or integrated with one another.
The shortcomings of the prior art are overcome and additional advantages are provided through the provision of a method of generating a symbol table. The method includes, for instance, obtaining a plurality of symbols of a plurality of independent applications; and including the plurality of symbols in a common symbol table.
In a further aspect of the present invention, a method of generating a common symbol table is provided. The method includes, for instance, inputting information associated with one or more common symbols in a common symbol table external to a plurality of independent applications, the one or more common symbols corresponding to the plurality of independent applications; and creating at least one stub usable in locating at least one common symbol of the one or more common symbols of the common symbol table.
System and computer program products corresponding to the above-summarized methods are also described and claimed herein.
Advantageously, a capability is provided that reduces the amount of debugging information for applications that are not linked, compiled or integrated with one another. A common symbol table that is placed in a common location includes the common symbols for a plurality of independent applications. This reduces the size of the applications and the amount of storage space required to include the common symbol information and reduces the resources required for each individual application.
Additional features and advantages are realized through the techniques of the present invention. Other embodiments and aspects of the invention are described in detail herein and are considered a part of the claimed invention.
The subject matter which is regarded as the invention is particularly pointed out and distinctly claimed in the claims at the conclusion of the specification. The foregoing and other objects, features, and advantages of the invention are apparent from the following detailed description taken in conjunction with the accompanying drawings in which:
a depicts one embodiment of a computing environment incorporating and using one or more aspects of the present invention;
b depicts one embodiment of a distributed debugger executing within the computing environment of
a depicts one embodiment of processing stages associated with developing an application;
b depicts further details of the compilation stage of
a depicts one embodiment of processing stages associated with developing an application, in accordance with an aspect of the present invention;
b depicts further details of the compilation stage of
In one aspect of the present invention, a capability is provided for generating a common symbol table that is to include symbols of a plurality of independent applications. The applications are independent in that they need not be linked, compiled or integrated together. Instead, the applications can be disjoint or unrelated. The common symbol table is located, for instance, in a common or global location, such as in common storage of a computing environment, which is accessible by the independent applications.
One embodiment of a computing environment incorporating and using one or more aspects of the present invention is depicted in
Connection 104 is, for instance, a TCP/IP connection, which includes a network interface card 116 at each end. In other embodiments, however, connection 104 may be any type of connection, such as a wire connection, token ring or network connection, to name just a few examples.
The computing environment described above is only one example. One or more aspects of the present invention can be incorporated and used with other types of computing units, computers, processors, nodes, systems, workstations and/or other environments, without departing from the spirit of the present invention.
For example, aspects of the present invention can be used in a single system environment. One such environment may include, for instance, an RS/6000 computer system running the AIX operating system offered by International Business Machines Corporation, Armonk, N.Y. In yet a further embodiment, one or more aspects of the invention can be included in a large parallel system with a plurality of units coupled to one another. These and many other types of environments are capable of incorporating and using aspects of the present invention.
In one embodiment, executing within the computing environment is a debugger. As one example, this debugger is a distributed debugger, in which components of the debugger are run on the various computing units. For example, as shown in
Although a distributed debugger is described herein, the capabilities of the present invention are not limited to such a debugger. Non-distributed debuggers may also be used. For example, one or more aspects of the present invention can be incorporated and used in a single system environment using a non-distributed debugger.
A debugger is used during the process of software development to detect one or more errors of a developing application. In order to debug an application, debugging information is employed. This debugging information is provided by the compiler, when a debugging option is chosen. As one example, the debugging information includes symbols generated by the compiler that represent each variable or inline definition included in the application source.
A symbol describes, for instance, the location of a variable in memory at any given time that variable is active in the program. As one example, a symbol includes information about the name of a variable, the type of the variable, and the address or list of addresses for the variable. For example, if the variable int i is declared in a program, a symbol is generated for the variable. The symbol includes, for instance, information about the name (i), the type (int), and information the compiler generates about how to locate the variable.
One example of generating debug information is described with reference to
Subsequent to compilation, the object modules are loaded 210 (
Thereafter, the application is executed 212. In one embodiment, as part of execution, the code is debugged 214 to determine if there are any errors. The debugger performing the debugging uses the debugging information (e.g., symbol table) generated by the compiler and stored locally to the application (e.g., internal to the application).
The debugging information may grow very large and cumbersome, if a large number of system include or definition files are used in the application. This causes the storage size needed to keep the application in a debuggable state to be onerous, and slows down application performance. Thus, in accordance with an aspect of the present invention, the amount of debugging information stored in the application object is reduced. This reduces the storage size required to keep the application in a debuggable state and increases the performance of the application (e.g., during compilation). In order to make this reduction, common symbols (e.g., system symbols included in include and definition files) are placed in a common location, instead of inside the application object, and the application object includes references to those common symbols. Since the common symbol information is separated from the local application information and placed in a common location, the average size of an application program is reduced by a significant percentage.
One embodiment of the logic associated with providing separate common symbols is described with reference to
Subsequent to compilation, the one or more application objects are (linked and) loaded 312 (
The common symbol table is used to merge common information used by different programs into a common location. In one example, the common symbol table has the same format as the debugging information generated by the compiler. This enables the debugger to use the same access method to look up the information. The common symbol table may be created incrementally or generated once. Using an incremental approach, the common symbol table may grow with each run of the compiler, if additional system include files or other files having common symbols are encountered. In a different approach, the common symbol table is created once from a predefined selection of system include files and/or other files. Variations of the two approaches are also possible.
Symbols which have been determined or specified as common symbols (e.g., system symbols) are not maintained within the local symbol table, but instead are placed in the common symbol table. However, to locate the symbols in the common symbol table, stubs, which are included in the local table, are employed. Each stub includes some information (e.g., symbol name) about the symbol, but much less information than typically included in the table (e.g., no type information). For example, for the following C structure:
the stub would include:
name: thisvar
stub: mystruct
flag: is_stub
location: base address for thisvar.
Symbols can be indicated as common symbols through various techniques. For example, symbols generated from system header files are considered common symbols. Further, a particular command can be used to indicate common symbols. For instance, an application developer can use a pragma command in the source to indicate specific variables or types as common symbols. In the following example, the symbols “a_common_symbol” and “another_common_symbol”, and the type “my_common_type” are defined as common symbols:
For the above example, the compiler is to be enhanced to support #pragma comsym statements.
When the debugger loads the symbol information and detects a stub, the debugger looks up the symbol name in the common symbol table and attaches the type information in the common symbol table to the remainder of the symbol. This allows multiple programs to share entries within the common symbol table, thus saving space needed to store the debugging information. In addition to saving space, this capability allows faster initialization of the debugger, as the common symbols are loaded once (in one example), and then persist in memory, usable by multiple programs. If a program does not contain any common symbols, the performance is not affected. If a program does contain common symbols, the performance is improved, as the load time required to search through debugging information is decreased due to its smaller size.
In order to provide the common symbol table, changes are made, in one aspect of the present invention, to the compilation stage of processing, as well as to the debugging stage. These changes are described with reference to
Referring to
Returning to INQUIRY 404, should the symbol be from a system file, then a further determination is made as to whether the input symbol is already in the common symbol table, INQUIRY 408. In one example, this determination is made by looking up the symbol in common symbol table 410. If the input symbol is not in the common symbol table, then the common symbol is placed in the common symbol table and a stub is created, STEP 412. For instance, the bulk of the symbol information (e.g., the type information) is removed from the appropriate local table (i.e., the internal table of the application corresponding to the symbol) and placed in the common table. Further, a stub is placed in the local table 406 to be used in locating the symbol. The stub includes a minimal amount of information.
Returning to INQUIRY 408, if the input symbol is in the common symbol table, then a stub, if needed, is generated for the symbol, STEP 414. In some examples, a stub may not be needed, and thus, is excluded. For instance, if the stub is not necessary to determine the location of the symbol at application execution time, then it is excluded. As one example, #define MY_CONST3 does not need a stub. Instead, the symbol is simply placed in the common symbol table.
Further, if the name already exists in the common symbol table, but the type generated by the compiler does not match the type located in the common symbol table, then the compiler does not remove the debugging information, as this would result in the wrong type being generated for the variable at debug time.
Subsequent to placing the appropriate information in the internal symbol table, processing continues with INQUIRY 407. At the completion of processing, a common symbol table has been created by removing the bulky information from the local tables and placing in its stead, one or more stubs, if desired.
Although in the above embodiment the check for common symbols includes a check of system files, in other embodiments, the check for common symbols may include looking for other types of files or by other processing. Moreover, although in the above embodiment common information is originally placed in local tables and then removed, in other embodiments other techniques may be employed. For instance, the information may not be placed in a local table, but may be placed directly in the common table or elsewhere. Other variations are also possible.
During the debugging process, the common symbol table is utilized as described with reference to
Returning to INQUIRY 506, if the name does not correspond to a stub, then the information in the local table is returned, STEP 510.
Further, returning to INQUIRY 502, if the name is not in the local table, then a further determination is made as to whether the name is in the common table, INQUIRY 512. That is, is the name in the common table, but no stub is needed. Should the name be in the common table, then the located symbol is returned, STEP 510. Otherwise, an error is returned, STEP 514.
Described in detail above is a capability for generating a common symbol table and using that common symbol table during the debugging of application code. The common symbol table includes symbols of a plurality of independent applications. By placing the bulky information associated with the symbols in the common symbol table, and therefore, outside the application code, storage associated with the application code is reduced and performance of the application is enhanced.
Although in the above embodiments, the common symbol table is used for debugging purposes, this is only one example. It is possible to generate and use a common symbol table for other purposes. Further, although the term table is utilized, the structure used to hold the common symbols is not limited to a table structure. Many types of data structures are usable, and thus, the term table includes those structures.
Further, although the embodiments herein refer to a compiler, aspects of the invention are equally applicable to an assembler environment or other like environments. Thus, the term compiler includes degenerate forms of compilers, such as assemblers and other like components.
The present invention can be included in an article of manufacture (e.g., one or more computer program products) having, for instance, computer usable media. The media has embodied therein, for instance, computer readable program code means for providing and facilitating the capabilities of the present invention. The article of manufacture can be included as a part of a computer system or sold separately.
Additionally, at least one program storage device readable by a machine, tangibly embodying at least one program of instructions executable by the machine to perform the capabilities of the present invention can be provided.
The flow diagrams depicted herein are just examples. There may be many variations to these diagrams or the steps (or operations) described therein without departing from the spirit of the invention. For instance, the steps may be performed in a differing order, or steps may be added, deleted or modified. All of these variations are considered a part of the claimed invention.
Although preferred embodiments have been depicted and described in detail herein, it will be apparent to those skilled in the relevant art that various modifications, additions, substitutions and the like can be made without departing from the spirit of the invention and these are therefore considered to be within the scope of the invention as defined in the following claims.
Number | Name | Date | Kind |
---|---|---|---|
4636940 | Goodwin, Jr. | Jan 1987 | A |
4954942 | Masuda et al. | Sep 1990 | A |
5170465 | McKeeman et al. | Dec 1992 | A |
5182806 | McKeeman et al. | Jan 1993 | A |
5182807 | Mizuse et al. | Jan 1993 | A |
5193191 | McKeeman et al. | Mar 1993 | A |
5278961 | Mueller | Jan 1994 | A |
5278962 | Masuda et al. | Jan 1994 | A |
5291601 | Sands | Mar 1994 | A |
5325531 | McKeeman et al. | Jun 1994 | A |
5386522 | Evans | Jan 1995 | A |
5408650 | Arsenault | Apr 1995 | A |
5408665 | Fitzgerald | Apr 1995 | A |
5555412 | Besaw et al. | Sep 1996 | A |
5555419 | Arsenault | Sep 1996 | A |
5560009 | Lenkov et al. | Sep 1996 | A |
5594903 | Bunnell et al. | Jan 1997 | A |
5651111 | McKeeman et al. | Jul 1997 | A |
5655073 | Nishikado et al. | Aug 1997 | A |
5659751 | Heninger | Aug 1997 | A |
5680622 | Even | Oct 1997 | A |
5689684 | Mulchandani et al. | Nov 1997 | A |
5715460 | Acker et al. | Feb 1998 | A |
5727147 | van Hoff | Mar 1998 | A |
5764989 | Gustafsson et al. | Jun 1998 | A |
5771385 | Harper | Jun 1998 | A |
5778231 | van Hoff et al. | Jul 1998 | A |
5838975 | Abramson et al. | Nov 1998 | A |
5848274 | Hamby et al. | Dec 1998 | A |
5860138 | Engebretsen et al. | Jan 1999 | A |
5892941 | Khan et al. | Apr 1999 | A |
5923882 | Ho et al. | Jul 1999 | A |
5950008 | van Hoff | Sep 1999 | A |
5956512 | Simmons et al. | Sep 1999 | A |
5987249 | Grossman et al. | Nov 1999 | A |
5987256 | Wu et al. | Nov 1999 | A |
6021272 | Cahill et al. | Feb 2000 | A |
6026242 | Chessin et al. | Feb 2000 | A |
6029207 | Heninger | Feb 2000 | A |
6067413 | Gustafsson et al. | May 2000 | A |
6067641 | McInerney et al. | May 2000 | A |
6101325 | Flaat | Aug 2000 | A |
6178548 | Hickman et al. | Jan 2001 | B1 |
6226786 | Hickman et al. | May 2001 | B1 |
6256777 | Ackerman | Jul 2001 | B1 |
6286104 | Buhle et al. | Sep 2001 | B1 |
6298481 | Kosaka et al. | Oct 2001 | B1 |
6308317 | Wilkinson et al. | Oct 2001 | B1 |
6324683 | Fuh et al. | Nov 2001 | B1 |
6412106 | Leask et al. | Jun 2002 | B1 |
6434742 | Koepele, Jr. | Aug 2002 | B1 |
6754891 | Snyder et al. | Jun 2004 | B1 |
6795962 | Hanson | Sep 2004 | B1 |
6804813 | Willems et al. | Oct 2004 | B1 |
6810519 | Hicks | Oct 2004 | B1 |
6813762 | Plaxton | Nov 2004 | B1 |
6829760 | Bera | Dec 2004 | B1 |
6941492 | Ezra et al. | Sep 2005 | B1 |
6957419 | Baker et al. | Oct 2005 | B2 |
7065754 | Coutant et al. | Jun 2006 | B1 |
20020129336 | Bolding et al. | Sep 2002 | A1 |
20030074656 | Irino | Apr 2003 | A1 |
20030088865 | Lim et al. | May 2003 | A1 |
20030177419 | Baker et al. | Sep 2003 | A1 |
20030177421 | Baker et al. | Sep 2003 | A1 |
20030226134 | Sethi et al. | Dec 2003 | A1 |
20040015852 | Swetland | Jan 2004 | A1 |
20040181648 | Jacobs et al. | Sep 2004 | A1 |
20040205728 | Hanson | Oct 2004 | A1 |
20050026130 | Crowhurst et al. | Feb 2005 | A1 |
20050097533 | Chakrabarti et al. | May 2005 | A1 |
20050210275 | Homing et al. | Sep 2005 | A1 |
20060069970 | Bowers | Mar 2006 | A1 |
20060107254 | Bowers | May 2006 | A1 |
Number | Date | Country |
---|---|---|
62113244 | May 1987 | JP |
5334096 | Dec 1993 | JP |
10254710 | Sep 1998 | JP |
10289109 | Oct 1998 | JP |
Entry |
---|
Bradley et al. “JAZZ: an efficient compressed format for Java archive files”, 1998, IBM Centre for Advanced Studies Conference. |
“Diagnosing Java code: The case for static types” posted Jun. 1, 2002 at http://www-128.ibm.com/developerworks/library/j-diag0625.html. |
Levine, “Linkers & Loaders”, 1999, Academic Press, pp. 10-11. |
Office Action for U.S. Appl. No. 10/099,849, dated Jan. 10, 2005, pp. 1-19. |
Office Action for U.S. Appl. No. 10/099,286, dated Feb. 28, 2005, pp. 1-16. |
Office Action for U.S. Appl. No. 10/099,286, dated Mar. 7, 2006, pp. 1-24. |
Office Action for U.S. Appl. No. 10/099,286, dated Sep. 11, 2006, pp. 1-27. |
Number | Date | Country | |
---|---|---|---|
20030177420 A1 | Sep 2003 | US |