home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv4.zip / VACPP / IBMCPP / HELP / CPPPAHDI.INF (.txt) < prev    next >
OS/2 Help File  |  1995-04-12  |  38KB  |  1,141 lines

  1.  
  2. ΓòÉΓòÉΓòÉ <hidden> About this Information ΓòÉΓòÉΓòÉ
  3.  
  4. The How Do I... information provides solutions to common tasks that you would 
  5. perform with the various components of VisualAge C++. Before you begin to use 
  6. this information, it would be helpful to understand how to navigate through it: 
  7.  
  8.      Use the Contents and Index facilities to locate topics. 
  9.      Use the Search facility to search the text of this document. 
  10.      Use hypertext links to acquire related information on the current topic. 
  11.       Hypertext links appear in a different color (which you can customize 
  12.       using the OS/2 Scheme Palette). For example, below there are two lists of 
  13.       hypertext links. By double-clicking on the text of the link or by 
  14.       pressing Enter on a highlighted link, you will open a panel of related 
  15.       information. To shift the focus to other links using the keyboard, use 
  16.       the Tab key. 
  17.  
  18.  For more information on using this help facility, see: 
  19.  
  20.      How to Use the Contents 
  21.      How to Obtain Additional Information 
  22.      How to Access and Use IPF Facilities 
  23.  
  24.  For more information, see: 
  25.  
  26.      Other Information You Might Find Helpful 
  27.      Communicating Your Comments to IBM 
  28.      Notices 
  29.      Trademarks 
  30.  
  31.  
  32. ΓòÉΓòÉΓòÉ <hidden> How to Use the Contents ΓòÉΓòÉΓòÉ
  33.  
  34. The Contents window is the first to appear. Some topics have a plus ( ) icon 
  35. beside them. This icon indicates that additional topics are available. 
  36.  
  37. To expand the Contents if you are using a mouse, click on the plus ( ) icon. If 
  38. you are using the keyboard, use the Up or Down Arrow key to highlight the 
  39. topic, and press the plus (+) key. To see additional topics for a heading with 
  40. a plus ( ) icon, click on the icon or highlight that topic and press the plus 
  41. (+) key. 
  42.  
  43. To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  44. to highlight the topic, and then press the Enter key). 
  45.  
  46.  
  47. ΓòÉΓòÉΓòÉ <hidden> How to Obtain Additional Information ΓòÉΓòÉΓòÉ
  48.  
  49. After you select a topic, the information for that topic appears in a window. 
  50. Highlighted words or phrases indicate that additional information is available. 
  51. Certain words and phrases are highlighted in a different color from the 
  52. surrounding text. These are called hypertext terms. 
  53.  
  54. If you are using a mouse, double-click on the highlighted word. If you are 
  55. using a keyboard, press the Tab key to move to the highlighted word, and then 
  56. press the Enter key. Additional information then appears in a window. 
  57.  
  58.  
  59. ΓòÉΓòÉΓòÉ <hidden> How to Access and Use IPF Facilities ΓòÉΓòÉΓòÉ
  60.  
  61. Several choices are available for managing the information presented in this 
  62. document. There are three PullDown menus: the Services menu, the Options menu, 
  63. and the Help menu. 
  64.  
  65. The actions that are selectable from the Services menu operate on the active 
  66. window currently displayed on the screen. These actions include the following: 
  67.  
  68.  Placing Bookmarks 
  69.    You can set a placeholder so you can retrieve information of interest to 
  70.    you. 
  71.  
  72.  Searching for Information 
  73.    You can find occurrences of a word or phrase in the current topic, selected 
  74.    topics, or all topics. 
  75.  
  76.  Printing Information 
  77.    You can print one or more topics. You can also print a set of topics by 
  78.    first marking the topics in the Contents list. 
  79.  
  80.  Copying Information to a File 
  81.    You can copy a topic that you are viewing to the System Clipboard or to a 
  82.    file that you can edit. This method is particularly useful for copying 
  83.    syntax definitions and program samples into the application that you are 
  84.    developing. 
  85.  
  86.  Using the actions that are selectable from the Options menu, you can change 
  87.  the way your Contents list is displayed. To expand the Contents and show all 
  88.  levels for all topics, choose Expand all from the Options PullDown menu. You 
  89.  can also press the Ctrl, Shift and * keys together. 
  90.  
  91.  The actions that are selectable from the Help menu allow you to select 
  92.  different types of help information. 
  93.  
  94.  For information about any of the menu choices, highlight the choice in the 
  95.  menu and press F1. 
  96.  
  97.  
  98. ΓòÉΓòÉΓòÉ <hidden> Placing Bookmarks ΓòÉΓòÉΓòÉ
  99.  
  100. When you place a bookmark on a topic, it is added to a list of bookmarks you 
  101. have previously set.  You can view the list, and you can remove one or all 
  102. bookmarks from the list.  If you have not set any bookmarks, the list is empty. 
  103.  
  104. To set a bookmark, do the following: 
  105.  
  106.    1. Select a topic from the Contents. 
  107.    2. When that topic appears, select the Bookmark option from the Services 
  108.       menu. 
  109.    3. If you want to change the name used for the bookmark, type the new name 
  110.       in the field. 
  111.    4. Click on the Place radio button (or press the Up or Down Arrow key to 
  112.       select it). 
  113.    5. Click on OK (or select it and press Enter). The bookmark is then added to 
  114.       the bookmark list. 
  115.  
  116.  
  117. ΓòÉΓòÉΓòÉ <hidden> Searching for Information ΓòÉΓòÉΓòÉ
  118.  
  119. You can specify a word or phrase to be searched.  You can also limit the search 
  120. to a set of topics by first marking the topics in the Contents list. 
  121.  
  122. To search for a word or phrase in all topics, do the following: 
  123.  
  124.    1. Select the Search option from the Services menu. 
  125.    2. Type the word or words to be searched for. 
  126.    3. Click on All sections (or press the Up or Down Arrow keys to select it). 
  127.    4. Click on Search (or select it and press Enter) to begin the search. 
  128.    5. The list of topics where the word or phrase appears is displayed. 
  129.  
  130.  
  131. ΓòÉΓòÉΓòÉ <hidden> Printing Information ΓòÉΓòÉΓòÉ
  132.  
  133. You can print one or more topics, the index, or the table of contents.  Make 
  134. sure that your printer is connected to the serial port, configured correctly, 
  135. and ready for input. To print: 
  136.  
  137.    1. Select Print from the Services menu. 
  138.    2. Select what you want to print. Note that the This section and Marked 
  139.       sections choices are only available if you are viewing a topic or if you 
  140.       have marked topics, respectively.  To mark topics in the table of 
  141.       contents, press the Ctrl key and click on the topics, or use the arrow 
  142.       keys. 
  143.    3. Select Print to print what you've chosen on your printer. 
  144.  
  145.  
  146. ΓòÉΓòÉΓòÉ <hidden> Copying Information to a File ΓòÉΓòÉΓòÉ
  147.  
  148. You can copy a topic that you are viewing in two ways: 
  149.  
  150.      Copy copies the topic that you are viewing into the System Clipboard. If 
  151.       you are using a Presentation Manager (PM) editor (for example, the 
  152.       Enhanced Editor) that copies or cuts (or both) to the System Clipboard, 
  153.       and pastes to the System Clipboard, you can easily add the copied 
  154.       information to your program source module. 
  155.  
  156.      Copy to file copies the topic that you are viewing into a temporary file 
  157.       named TEXT.TMP. You can later edit that file by using any editor. 
  158.       TEXT.TMP is placed in the directory where your viewable document resides. 
  159.  
  160.  To copy a topic, do the following: 
  161.  
  162.    1. Expand the Contents list and select a topic. 
  163.    2. When the topic appears, select Copy to file from the Services menu. 
  164.    3. The system puts the text pertaining to that topic into the temporary file 
  165.       TEXT.TMP. 
  166.  
  167.  
  168. ΓòÉΓòÉΓòÉ <hidden> Other Information You Might Find Helpful ΓòÉΓòÉΓòÉ
  169.  
  170. The VisualAge C++ provides a number of online guides and references that we 
  171. hope you'll find helpful as you develop applications. This information 
  172. includes: 
  173.  
  174.      User's Guide information provides conceptual and usage information, 
  175.      Reference information is organized for quick access, and 
  176.      How Do I... information gives you specific instructions for performing 
  177.       common tasks. 
  178.  
  179.  You can get to this online information from the Information folder inside the 
  180.  main product folder. You can also get to it from the Help menu in any of the 
  181.  components of the product. 
  182.  
  183.  
  184. ΓòÉΓòÉΓòÉ <hidden> Communicating Your Comments to IBM ΓòÉΓòÉΓòÉ
  185.  
  186. If there is something you like, or dislike, about this document, please let us 
  187. know. You can use one of the methods listed below to send your comments to IBM. 
  188. Please be sure to include the complete title of the publication that you are 
  189. commenting on. For example, you would refer to the How Do I... information for 
  190. the Browser as: 
  191.   VisualAge C++ Browser: How Do I... for OS/2. 
  192.  
  193. The comments you send should only pertain to the information in this document 
  194. and its presentation. To request additional publications or to ask questions or 
  195. make comments about the functions of IBM products or systems, you should talk 
  196. to your IBM representative or your authorized IBM remarketer. 
  197.  
  198. When you send comments to IBM, you grant IBM a nonexclusive right to use or 
  199. distribute your comments in any way it believes appropriate without incurring 
  200. any obligation to you. 
  201.  
  202. You can send your comments to IBM in the following ways: 
  203.  
  204.      By mail to the following address: 
  205.  
  206.             IBM Canada Ltd. Laboratory
  207.             Information Development
  208.             2G/345/1150/TOR
  209.             1150 EGLINTON AVENUE EAST
  210.             NORTH YORK, ONTARIO
  211.             CANADA M3C 1H7
  212.  
  213.      By FAX to the following number: 
  214.  
  215.         -  United States and Canada: (416) 448-6161 
  216.         -  Other countries (+1) 416-448-6161 
  217.  
  218.      By electronic mail to one of the following IDs.  Be sure to include your 
  219.       entire network address if you wish to get a reply. 
  220.  
  221.         -  Internet: torrcf@vnet.ibm.com 
  222.         -  IBMLink: toribm(torrcf) 
  223.         -  IBM/PROFS: torolab4(torrcf) 
  224.         -  IBMMAIL: ibmmail(caibmwt9) 
  225.  
  226.  
  227. ΓòÉΓòÉΓòÉ <hidden> Notices ΓòÉΓòÉΓòÉ
  228.  
  229. Copyright International Business Machines Corporation, 1995. All rights 
  230. reserved. 
  231.  
  232. Note to U.S. Government Users - Documentation related to restricted rights - 
  233. Use, duplication, or disclosure is subject to restrictions set forth in GSA ADP 
  234. Schedule Contract with IBM Corp. 
  235.  
  236. This edition applies to Version 3.0 of IBM VisualAge C++ for OS/2 (30H1664, 
  237. 30H1665, 30H1666) and to all subsequent releases and modifications until 
  238. otherwise indicated in new editions.  Make sure you are using the correct 
  239. edition for the level of the product. 
  240.  
  241. This publication could include technical inaccuracies or typographical errors. 
  242. Changes are periodically made to the information herein; any such changes will 
  243. be reported in subsequent revisions. 
  244.  
  245. Requests for publications and for technical information about IBM products 
  246. should be made to your IBM Authorized Dealer or your IBM Marketing 
  247. Representative. 
  248.  
  249. When you send information to IBM, you grant IBM a nonexclusive right to use or 
  250. distribute the information in any ways it believes appropriate without 
  251. incurring any obligation to you. 
  252.  
  253. Any reference to an IBM licensed program in this publication is not intended to 
  254. state or imply that only IBM's licensed program may be used. Any functionally 
  255. equivalent product, program, or service that does not infringe any of IBM's 
  256. intellectual property rights may be used instead of the IBM product, program, 
  257. or service. Evaluation and verification of operation in conjunction with other 
  258. products, except  those expressly designated by IBM, is the user's 
  259. responsibility. 
  260.  
  261. IBM may have patents or pending patent applications covering subject matter in 
  262. this document.  The furnishing of this document does not give you any license 
  263. to these patents.  You can send license inquiries, in writing, to the IBM 
  264. Director of Licensing. IBM Corporation, 500 Columbus Avenue, Thornwood, NY, 
  265. 10594, USA. 
  266.  
  267. This publication contains examples of data and reports used in daily business 
  268. operations. To illustrate them as completely as possible, the examples include 
  269. the names of individuals, companies, brands, and products. All of these names 
  270. are fictitious and any similarity to the names and addresses used by an actual 
  271. business enterprise is entirely coincidental. 
  272.  
  273.  
  274. ΓòÉΓòÉΓòÉ <hidden> Trademarks and Service Marks ΓòÉΓòÉΓòÉ
  275.  
  276. The following terms used in this publication are trademarks or service marks of 
  277. IBM Corporation in the United States or other countries: 
  278.  
  279.  C/2                      C Set/2 
  280.  C Set ++                 Common User Access 
  281.  CUA                      IBM 
  282.  Operating System/2       OS/2 
  283.  Personal System/2        Presentation Manager 
  284.  PS/2                     VisualAge 
  285.  WorkFrame/2 
  286.  
  287.  Other company, product, and service names, which may be denoted by a double 
  288.  asterisk(**), may be trademarks or service marks of others. 
  289.  
  290.  
  291. ΓòÉΓòÉΓòÉ 1. Compile and link my program? ΓòÉΓòÉΓòÉ
  292.  
  293. You must compile and link your program with the proper options before you 
  294. create a trace file and analyze it with the Performance Analyzer. To compile 
  295. and link your program: 
  296.  
  297.    1. Compile your program with the /Gh and /Ti options. 
  298.  
  299.    2. Link your program with the CPPOPA3.OBJ object file using the /DE option. 
  300.  
  301.  The following example shows how to compile and link a program called 
  302.  SAMPLE.EXE for use with the Performance Analyzer. The required object file is 
  303.  italicized. 
  304.  
  305.  Compile: 
  306.  
  307.     icc /c /Ti /Gh sample.c
  308.  
  309.  Link: 
  310.  
  311.     icc /b"/DE" /FeSAMPLE.EXE sample.obj cppopa3.obj
  312.  
  313.  
  314. ΓòÉΓòÉΓòÉ 2. Trace system calls? ΓòÉΓòÉΓòÉ
  315.  
  316. To trace system calls, you must specify the following libraries before OS/2 
  317. libraries: 
  318.  
  319.      _DOSCALL.LIB 
  320.      _PMWIN.LIB 
  321.      _PMGPI.LIB 
  322.  
  323.  The following example shows how to compile and link a program called 
  324.  SAMPLE.EXE for use with the Performance Analyzer. The required object file is 
  325.  italicized. 
  326.  
  327.  Compile: 
  328.  
  329.     icc /c /Ti /Gh sample.c
  330.  
  331.  Link: 
  332.  
  333.     icc /b"/DE" /FeSAMPLE.EXE sample.obj cppopa3.obj
  334.      _doscall.lib _pmwin.lib _pmgpi.lib
  335.  
  336.  
  337. ΓòÉΓòÉΓòÉ 3. Start the Performance Analyzer? ΓòÉΓòÉΓòÉ
  338.  
  339. Starting from an OS/2 Prompt 
  340.  
  341. The command you enter to start the Performance Analyzer depends on which of the 
  342. following you want to do first: 
  343.  
  344.      Trace an executable 
  345.      Analyze an existing trace file. 
  346.      Display the Performance Analyzer's main control window 
  347.  
  348.  Tracing an Executable 
  349.  
  350.      If you have an executable you want to trace, you can start the analyzer 
  351.       from an OS/2 command prompt or a command file (.CMD) by entering: 
  352.  
  353.               icsperf myprog parms
  354.  
  355.       Where: 
  356.  
  357.       myprog         Represents an executable file name. This is optional. 
  358.       parms          Represents executable parameters. These are optional. 
  359.  
  360.       Note:  The first time you start the Performance Analyzer, a profile 
  361.       window appears and prompts you to specify where the Performance 
  362.       Analyzer's profile file should be located. If you want the default, press 
  363.       the OK push button. 
  364.  
  365.      You can also include the /go option in the command: 
  366.  
  367.               icsperf /go myprog parms
  368.  
  369.       Where: 
  370.  
  371.       /go            Option that executes your program, creates a trace file, 
  372.                      and then exits the Performance Analyzer. This option is 
  373.                      useful if you have several programs (requiring no manual 
  374.                      intervention) that you want to run in succession from an 
  375.                      OS/2 command file. This switch is optional. 
  376.       myprog         Represents an executable file name. This is required when 
  377.                      the /go option is specified. 
  378.       parms          Represents executable parameters. These are optional. 
  379.  
  380.  Analyzing an Existing Trace File 
  381.  
  382.  If you want to start analyzing a trace file you have already created, you can 
  383.  start the analyzer from an OS/2 command prompt or a command file (.CMD) by 
  384.  entering: 
  385.  
  386.     icsperf /x myprog.trc
  387.  
  388.  Where: 
  389.  
  390.  /x            Represents one or more of the following analyzer options. If you 
  391.                have already created a trace file, these options cause the trace 
  392.                file to be displayed in their respective diagrams. Once you are 
  393.                familiar with the Performance Analyzer application, you can 
  394.                quickly open the diagrams by entering as many of these options 
  395.                as you want in your startup command. This is optional. 
  396.  
  397.                /cn       Displays the trace file in the Call Nesting diagram. 
  398.  
  399.                /ed       Displays the trace file in the Execution Density 
  400.                          diagram. 
  401.  
  402.                /cg       Displays the trace file in the Dynamic Call Graph. 
  403.  
  404.                /ss       Displays the trace file in the Statistics diagram. 
  405.  
  406.                /tl       Displays the trace file in the Time Line diagram. 
  407.  
  408.  myprog.trc    Represents a trace file name. 
  409.  
  410.  Displaying the Performance Analyzer's Main Control Window 
  411.  
  412.  From the Performance Analyzer - Window Manager window, you can start tracing 
  413.  an executable or analyzing an existing trace file. 
  414.  
  415.  This window appears when you do either of the following: 
  416.  
  417.      Double-click on the Performance Analyzer icon in the Tools folder. 
  418.      Enter the following command: 
  419.  
  420.               icsperf
  421.  
  422.  Starting from WorkFrame 
  423.  
  424.  Before you start the Performance Analyzer from the WorkFrame environment, you 
  425.  must: 
  426.  
  427.    1. Create a project for the program you want to analyze. 
  428.  
  429.       Note:  For information on creating a project, refer to IBM WorkFrame: 
  430.       Introduction. 
  431.  
  432.    2. Compile and link your source with the proper options. 
  433.  
  434.       If you need help, see How do I... Compile and link my program? 
  435.  
  436.    3. Open a project folder in the WorkFrame window. 
  437.  
  438.    4. Highlight an object that represents an EXE file or a TRC file. 
  439.  
  440.    5. Click mouse button two on the highlighted object to display a pop-up 
  441.       menu. 
  442.  
  443.    6. Select Analyze. 
  444.  
  445.  
  446. ΓòÉΓòÉΓòÉ 4. Limit the amount of data collected in the trace file? ΓòÉΓòÉΓòÉ
  447.  
  448. There are several ways to limit the amount of data collected in your trace 
  449. file. 
  450.  
  451. Before you compile and link your program, you can do any of the following to 
  452. limit the amount of data collected: 
  453.  
  454.      Compile only code you plan to trace with the /Gh and /Ti compile options. 
  455.  
  456.      Place calls to the PerfStart and PerfStop entry points in your program to 
  457.       precisely control tracing. After a call to PerfStop is made, events are 
  458.       not recorded in the trace file until a call to PerfStart is made. 
  459.  
  460.       For instructions on adding these calls, see How do I... Start and stop 
  461.       tracing under program control? 
  462.  
  463.  You can do any of the following from the Trace Generation window to limit the 
  464.  amount of data collected. If you need help displaying the Trace Generation 
  465.  window, see How do I... Create a trace file? 
  466.  
  467.      Disable program components. (Disabled components are not traced.) 
  468.  
  469.       To do this: 
  470.  
  471.            Double-click on a component file name or the icon next to it. 
  472.  
  473.            Note:  If the icon next to a component is: 
  474.              -  Green (it also has no slash mark), the component is enabled. 
  475.              -  Red (it also has a slash mark), the component is disabled. 
  476.              -  White, the component cannot be traced. 
  477.  
  478.      Decrease the call depth setting. 
  479.  
  480.       To do this: 
  481.  
  482.         1. Select the Call Depth... choice from the Options menu. The Call 
  483.            Depth window appears. 
  484.  
  485.         2. Select the number of calls you want to trace or specify threads you 
  486.            want to include or exclude from the trace file. 
  487.  
  488.            The default is to have all threads selected with the maximum depth 
  489.            of 128. You can limit the amount of data collected by selecting 
  490.            smaller values in the Call Depth window. 
  491.  
  492.      Set a trigger on one or more functions. A trigger turns tracing on when a 
  493.       selected function is called and off when the function returns program 
  494.       control to the caller. If you set a trigger, the Performance Analyzer 
  495.       will not trace events until a triggered function is called. This is an 
  496.       easy way to limit the trace file data to a single function. 
  497.  
  498.       Note:  If you do not set any triggers, trace information will be 
  499.       collected for all traceable functions that you have not disabled. If you 
  500.       do set one or more triggers, trace information will only be collected for 
  501.       those functions on which a trigger has been set. 
  502.  
  503.       To set a trigger: 
  504.  
  505.         1. Select a function on which you want to set a trigger. 
  506.  
  507.         2. Select the Set trigger choice in the Edit menu. The letter T appears 
  508.            in the icon next to the function name. 
  509.  
  510.            Note:  You can set multiple triggers. 
  511.  
  512.      Disable time stamp recording. 
  513.  
  514.       To do this, select the Time stamp events choice from the Options menu. 
  515.       The check mark next to the choice is removed to show that it is not 
  516.       enabled. 
  517.  
  518.       Disabling time stamp recording does not restrict the number of events 
  519.       collected in the trace file. Rather, it makes generated trace files 
  520.       smaller because time stamps are not stored. 
  521.  
  522.      Enable buffer wrapping. 
  523.  
  524.       By choosing this option, your trace file will only be as large as your 
  525.       buffer. The buffer is reused over and over again and previously collected 
  526.       information is potentially destroyed. This option is useful when you are 
  527.       only interested in what was happening when your program ended. 
  528.  
  529.       To do this: 
  530.  
  531.         1. Select the Buffer control... choice from the Options menu. 
  532.  
  533.            The Buffer Control window appears. 
  534.  
  535.         2. Select the Yes radio button in the Buffer wrapping group box. 
  536.  
  537.  
  538. ΓòÉΓòÉΓòÉ 5. Trace file accesses? ΓòÉΓòÉΓòÉ
  539.  
  540. To trace file accesses, do the following: 
  541.  
  542.    1. Compile your program with the /Gh and /Ti options. 
  543.  
  544.    2. Link your program with the CPPOPA3.OBJ and _DOSCALL.LIB files. When 
  545.       linking your program, use the /DE option. 
  546.  
  547.    3. Start the analyzer from an OS/2 prompt by entering: 
  548.  
  549.               icsperf myprog parms
  550.  
  551.       Where: 
  552.  
  553.       myprog         Represents an executable file name. 
  554.       parms          Represents executable parameters. These are optional. 
  555.  
  556.    4. When the Trace Generation window appears, select the File access choice 
  557.       from the Options menu. A check mark appears next to the choice to 
  558.       indicate that it is enabled. 
  559.  
  560.       When a DOS call references a file, the Performance Analyzer keeps track 
  561.       of the file name associated with the traced DOS call. These calls are 
  562.       shown in the diagrams under the functions that made the file accesses. 
  563.       They appear as function names with their corresponding files in 
  564.       parentheses. 
  565.  
  566.    5. Click on the Trace push button to create a trace file. If you need help 
  567.       continuing, see How do I... Create a trace file? or How do I... View a 
  568.       trace file in any of the five diagrams? 
  569.  
  570.  
  571. ΓòÉΓòÉΓòÉ 6. Start and stop tracing under program control? ΓòÉΓòÉΓòÉ
  572.  
  573. Place the PerfStart and PerfStop calls into your source code to control 
  574. precisely when the Performance Analyzer starts and stops recording events 
  575. during program execution. 
  576.  
  577. To turn tracing: 
  578.  
  579.      Off, call the PerfStop entry point. 
  580.      On, call the PerfStart entry point. 
  581.  
  582.  Notes: 
  583.  
  584.      The default setting for tracing is enabled. 
  585.      If the trace is already on, calling PerfStart has no effect. If the trace 
  586.       is already off, calling PerfStop has no effect. 
  587.  
  588.  To add calls to the PerfStart and PerfStop entry points: 
  589.  
  590.    1. Declare a prototype for the PerfStart and PerfStop entry points. 
  591.  
  592.       For C and C ++ programs, the prototype will be inserted for you when you 
  593.       compile your program if you place the following statement at the 
  594.       beginning of your source file: 
  595.  
  596.               #include <icsperf.h>
  597.  
  598.       Note:  If you want to insert the prototypes yourself, the prototypes for 
  599.              C and C ++ programs are as follows: 
  600.  
  601.       C Prototype 
  602.  
  603.               VOID PerfStart (VOID);
  604.               VOID PerfStop (VOID);
  605.  
  606.       C ++ Prototype 
  607.  
  608.               EXTERN "C" {VOID PerfStart (VOID);}
  609.               EXTERN "C" {VOID PerfStop (VOID);}
  610.  
  611.    2. Add calls to the PerfStart and PerfStop entry points everywhere you want 
  612.       to start or stop tracing. 
  613.  
  614.       The following example shows how calls to the PerfStart and PerfStop entry 
  615.       points could be placed in your program: 
  616.  
  617.                    .
  618.                    .
  619.                    .
  620.               PerfStop();  // turn off tracing here
  621.                    .
  622.                    .
  623.                    .
  624.               PerfStart();  // resume tracing here
  625.  
  626.  
  627. ΓòÉΓòÉΓòÉ 7. Create a trace file? ΓòÉΓòÉΓòÉ
  628.  
  629. To create a trace file, do the following: 
  630.  
  631.    1. Compile and link your program with the proper options, if you have not 
  632.       already done so. 
  633.  
  634.       If you need help, see How do I... Compile and link my program? 
  635.  
  636.    2. Start the Performance Analyzer, if you have not already done so. 
  637.  
  638.       If you need help, see How do I... Start the Performance Analyzer? 
  639.  
  640.    3. From the Trace Generation window, click on the Trace push button. 
  641.  
  642.       Notes: 
  643.  
  644.           If you did not start the Performance Analyzer with any options, or 
  645.            if the Performance Analyzer is already started, you can display the 
  646.            Trace Generation window by doing the following: 
  647.  
  648.              a. Click on the Create Trace... push button on the Performance 
  649.                 Analyzer - Window Manager window. 
  650.              b. Fill in the appropriate entry fields when the Create Trace 
  651.                 window appears. 
  652.              c. Click on OK. 
  653.  
  654.           If you want to create a smaller trace file, there are some steps you 
  655.            can complete from this window that will reduce the amount of data 
  656.            collected. For instructions, see How do I... Limit the amount of 
  657.            data collected in the trace file? 
  658.  
  659.       The Application Monitor window appears and your program begins executing. 
  660.  
  661.    4. Click on the Stop push button if you do not want to trace your entire 
  662.       program or if you suspect your program is in a loop or has deadlocked. 
  663.       Otherwise, wait until your program has finished executing and the Analyze 
  664.       Trace window appears. 
  665.  
  666.  Once created, your trace file is stored and can be reused in different 
  667.  Performance Analyzer sessions without having to retrace your program. 
  668.  
  669.  
  670. ΓòÉΓòÉΓòÉ 8. View a trace file in any of the five diagrams? ΓòÉΓòÉΓòÉ
  671.  
  672. The Performance Analyzer provides the following five diagrams in which you can 
  673. view and analyze a trace file: 
  674.  
  675.      Call Nesting 
  676.      Dynamic Call Graph 
  677.      Execution Density 
  678.      Statistics 
  679.      Time Line 
  680.  
  681.  Before you can view your program's execution in one of the diagrams, a trace 
  682.  file must have been created. Once created, this trace file is stored and can 
  683.  be reused in different Performance Analyzer sessions without having to retrace 
  684.  your program. 
  685.  
  686.  To view a trace file in any of the five diagrams, do the following: 
  687.  
  688.    1. Create a trace file. 
  689.  
  690.       If you need help, see How do I... Create a trace file? 
  691.  
  692.    2. From the Performance Analyzer - Window Manager window, display the 
  693.       Analyze Trace window by either clicking on the Analyze Trace... push 
  694.       button or selecting the Analyze trace... choice from the File menu. 
  695.  
  696.    3. Make sure the name of the trace file is properly entered on the Analyze 
  697.       Trace window. If you have just created a trace file, the Analyze Trace 
  698.       window is displayed with the trace file name filled in for you. 
  699.  
  700.    4. Select the appropriate check box or check boxes in the Analyze Trace 
  701.       window. 
  702.  
  703.    5. Click on the OK push button. 
  704.  
  705.  
  706. ΓòÉΓòÉΓòÉ 9. Interpret the Call Nesting diagram? ΓòÉΓòÉΓòÉ
  707.  
  708. If you need help opening a trace file in the Call Nesting diagram, see How do 
  709. I... View a trace file in any of the five diagrams? 
  710.  
  711. The Call Nesting diagram shows the trace file as a sequential series of 
  712. function calls and returns. This diagram helps in diagnosing problems with 
  713. critical sections, sequencing protocols, thread delays, program deadlocks, and 
  714. program crashes. 
  715.  
  716. Scroll through the diagram to: 
  717.  
  718.      Identify which functions were called. 
  719.      See the order in which functions are called and returned. 
  720.      See the interactions among various threads. A horizontal dotted line 
  721.       indicates that your program has switched from one thread to another. 
  722.       Threads are separated in the diagram by light gray vertical lines. 
  723.      Get a better understanding of the program's flow. 
  724.  
  725.  
  726. ΓòÉΓòÉΓòÉ 10. Interpret the Dynamic Call Graph? ΓòÉΓòÉΓòÉ
  727.  
  728. If you need help opening a trace file in the Dynamic Call Graph, see How do 
  729. I... View a trace file in any of the five diagrams? 
  730.  
  731. The Dynamic Call Graph is a graphical representation of your program's 
  732. execution, which gives you an overall view of your program and its flow. It 
  733. shows the relative importance (in terms of execution time) of the different 
  734. functions and the call hierarchy. 
  735.  
  736. In this diagram, nodes represent functions; arcs, which are displayed between 
  737. pairs of nodes, represent calls from one function to another. Double-click on 
  738. any node to display a window that provides both the name of the represented 
  739. function and its execution information. Double-click on any arc to display a 
  740. window that provides the caller and callee of the arc. 
  741.  
  742. Using color and node size, this diagram helps you easily see where time is 
  743. spent in the program. Node color is based on the execution time spent in a 
  744. function; arc color is based on the number of calls between pairs of functions. 
  745. Node size represents both execution time and active time. 
  746.  
  747. Node Color 
  748.  
  749. White is used for functions with no execution time; gray is used for functions 
  750. with execution times less than 1/8 of the maximum execution time; blue is used 
  751. for functions with execution times between 1/8 and 1/4 of the maximum; yellow 
  752. is used for functions with execution times between 1/4 and 1/2 of the maximum; 
  753. and red is used for functions with execution times greater than 1/2 of the 
  754. maximum. 
  755.  
  756. Arc Color 
  757.  
  758. White shows that no calls were made between the functions; gray shows that less 
  759. than 1/8 of the maximum number of calls made were made between the functions; 
  760. blue shows that 1/8 to 1/4 of the maximum number of calls made were made 
  761. between the functions; yellow shows that 1/4 to 1/2 of the maximum number of 
  762. calls made were made between the functions; and red shows that at least 1/2 of 
  763. the maximum number of calls made were made between the functions. 
  764.  
  765. Green shows that a node or an arc is selected. 
  766.  
  767. Node Size 
  768.  
  769. The height of each node is determined by its execution time relative to the 
  770. function that has the greatest execution time. The width of each node is 
  771. determined by its active time relative to the function that has the greatest 
  772. active time. Active time is the time spent on the call stack. If a function is 
  773. waiting for a message, the time spent waiting is logged as active time. 
  774.  
  775. A node representing a main function that doesn't do much processing on its own 
  776. would be short and wide because it spends little time executing, but remains on 
  777. the call stack for a long time. 
  778.  
  779. Conversely, a node representing a function that does not call any other 
  780. functions (a leaf node) would generally be at least as tall as it is wide 
  781. (maybe taller) because it is executing whenever it is on the call stack. 
  782.  
  783.  
  784. ΓòÉΓòÉΓòÉ 11. Interpret the Execution Density diagram? ΓòÉΓòÉΓòÉ
  785.  
  786. If you need help opening a trace file in the Execution Density diagram, see How 
  787. do I... View a trace file in any of the five diagrams? 
  788.  
  789. The Execution Density diagram shows the program in terms of execution time. The 
  790. Performance Analyzer assigns every traced function a vertical column in the 
  791. diagram. Time is represented linearly along the vertical axis with time zero at 
  792. the top of the diagram and the elapsed time from program startup to program 
  793. termination at the bottom of the diagram. Short horizontal lines of various 
  794. colors are drawn in the vertical columns. 
  795.  
  796. Each horizontal line in the Execution Density diagram represents a unit of time 
  797. which is called a time slice. For each time slice, the Performance Analyzer 
  798. calculates the percentage of time a particular function was executing during 
  799. that time slice. The percentage is then mapped to a color and a short 
  800. horizontal line of the appropriate color is drawn in the column representing 
  801. the given function at the vertical location corresponding to the time slice. 
  802.  
  803. Note:  Both the percentage ranges and the colors can be varied by selecting the 
  804. Color choice from the diagram's Options menu. 
  805.  
  806. When you alter the scale of a diagram, you actually change the time slice. This 
  807. could cause the colors of the short horizontal lines in the diagram to change. 
  808.  
  809. The Execution Density diagram is most useful when the scale is compressed 
  810. because it allows you to get an overview of what functions were the most active 
  811. at various stages of your program's execution. 
  812.  
  813. If you expand the scale too much, the time slice will be quite small. Every 
  814. function will then appear to occupy a large percentage of the execution time 
  815. for any given time slice. Functions might appear as long, vertical, red bars. 
  816.  
  817.  
  818. ΓòÉΓòÉΓòÉ 12. Interpret the Statistics diagram? ΓòÉΓòÉΓòÉ
  819.  
  820. If you need help opening a trace file in the Statistics diagram, see How do 
  821. I... View a trace file in any of the five diagrams? 
  822.  
  823. The Statistics diagram is a textual report of cumulative information about your 
  824. program's execution. This diagram provides: 
  825.  
  826.      Summary information regarding the number of executables generating 
  827.       events, the number of functions generating events, the number of threads 
  828.       generating events, and the total number of events. 
  829.      Detailed information for each function traced, including: 
  830.         -  Percent of total program execution time spent in the function 
  831.         -  Percent of the total program execution time that the function was on 
  832.            the call stack. 
  833.         -  Number of times the function was called. 
  834.         -  Cumulative program execution time spent in the function. 
  835.         -  Cumulative program execution time that the function was on the call 
  836.            stack. 
  837.         -  Execution time for the shortest call to the function. 
  838.         -  Execution time for the longest call to the function. 
  839.         -  Average execution time for a call to the function. 
  840.  
  841.  All of this summary information can be either printed or saved to a file on 
  842.  your disk. 
  843.  
  844.  You can use the Statistics diagram to: 
  845.  
  846.      Quickly determine which functions are consuming the largest amount of 
  847.       execution time. These functions are likely to be ones for which 
  848.       Performance Tuning would be most beneficial. 
  849.      Perform algorithm analysis. 
  850.         -  By comparing the number of calls that were actually made to a 
  851.            particular function with the number of calls that you expected to be 
  852.            made, you may be able to isolate some inefficiencies in your 
  853.            algorithm. 
  854.  
  855.         -  By comparing the statistics for each of two different versions of an 
  856.            algorithm, you can determine which algorithm performs better. To do 
  857.            this: 
  858.  
  859.              1. Create a trace file for each algorithm. 
  860.  
  861.                 If you need help, see How do I... Create a trace file? 
  862.  
  863.              2. Open each trace file in the Statistics diagram. 
  864.  
  865.                 If you need help, see How do I... View a trace file in any of 
  866.                 the five diagrams? 
  867.  
  868.            Comparing the two trace files side by side will show you which 
  869.            algorithm is faster and by how much. 
  870.      Determine which of your functions are good candidates for inlining. If a 
  871.       function has a small average execution time and is called often, it is a 
  872.       good candidate for inlining. 
  873.  
  874.  
  875. ΓòÉΓòÉΓòÉ 13. Interpret the Time Line diagram? ΓòÉΓòÉΓòÉ
  876.  
  877. If you need help opening a trace file in the Time Line diagram, see How do I... 
  878. View a trace file in any of the five diagrams? 
  879.  
  880. The Time Line diagram is like the Call Nesting diagram, but it also displays 
  881. time information. It places function calls and returns in sequence along a 
  882. vertical time line. Rather than a constant distance between events, as in the 
  883. Call Nesting diagram, the distance between events in the Time Line diagram is 
  884. determined by the time between events. 
  885.  
  886. In the Time Line diagram, a function call is represented by a short horizontal 
  887. line to the right while a function return is represented by a short horizontal 
  888. line to the left. These horizontal lines are connected by vertical lines. The 
  889. length of any given vertical line is proportional to the amount of time which 
  890. elapsed between the events. 
  891.  
  892. The Time Line diagram also shows when the flow of program execution switches 
  893. from one thread to another. Thread switches are represented in the Time Line 
  894. diagram as dashed horizontal lines. Threads are separated in the diagram by 
  895. light gray vertical lines. 
  896.  
  897. The Time Line diagram can be used to: 
  898.  
  899.      Easily locate thread switches (especially when the scale is compressed). 
  900.      Quickly see which functions are consuming the greatest amount of 
  901.       execution time. If a function consumes more processing time than you 
  902.       expected, you may want to take a closer look at that function to 
  903.       determine what you can do to improve its performance. 
  904.      Measure the length of a function call by doing the following: 
  905.         1. Select the Edit menu. 
  906.  
  907.         2. Select the Find function... choice. 
  908.  
  909.         3. Enter the name of the function in the Find string: entry field. 
  910.  
  911.            The Performance Analyzer finds the function, highlights it, and 
  912.            displays its execution information in the Status Area. 
  913.  
  914.  
  915. ΓòÉΓòÉΓòÉ 14. Filter trace events from the diagrams? ΓòÉΓòÉΓòÉ
  916.  
  917. Trace information can be filtered from the following diagrams: 
  918.  
  919.      Call Nesting 
  920.      Dynamic Call Graph 
  921.      Execution Density 
  922.      Statistics 
  923.  
  924.  From the Call Nesting and Execution Density diagrams, you can filter events by 
  925.  function or by thread. From the Dynamic Call Graph and Statistics diagrams, 
  926.  you can only filter events by thread. 
  927.  
  928.  To filter events by function: 
  929.  
  930.    1. Create a trace file. 
  931.  
  932.       If you need help, see How do I... Create a trace file? 
  933.  
  934.    2. Open the trace file in the Call Nesting or Execution Density diagram. 
  935.  
  936.       If you need help, see How do I... View a trace file in any of the five 
  937.       diagrams? 
  938.  
  939.    3. Select the Include functions... choice from the View menu. 
  940.  
  941.    4. From the Include Functions window, deselect the functions you do not want 
  942.       displayed. 
  943.  
  944.    5. Click on the OK push button. 
  945.  
  946.  To filter events by thread: 
  947.  
  948.    1. Create a trace file. 
  949.  
  950.       If you need help, see How do I... Create a trace file? 
  951.  
  952.    2. Open the trace file in the Call Nesting, Dynamic Call Graph, Execution 
  953.       Density, or Statistics diagram. 
  954.  
  955.       If you need help, see How do I... View a trace file in any of the five 
  956.       diagrams? 
  957.  
  958.    3. Select the Include threads... choice from the View menu. 
  959.  
  960.    4. From the Include Threads window, select the thread for which you want 
  961.       trace information displayed. 
  962.  
  963.    5. Click on the OK push button. 
  964.  
  965.  
  966. ΓòÉΓòÉΓòÉ 15. Correlate events between diagrams? ΓòÉΓòÉΓòÉ
  967.  
  968. Correlating events between diagrams allows you to select events in one diagram 
  969. and see the same events in another diagram. The Performance Analyzer provides 
  970. three time-scaled diagrams that can be correlated: Call Nesting, Execution 
  971. Density, and Time Line. 
  972.  
  973. To correlate events between diagrams, do the following: 
  974.  
  975.    1. Create a trace file. 
  976.  
  977.       If you need help, see How do I... Create a trace file? 
  978.  
  979.    2. Open the trace file in the Call Nesting, Execution Density, and Time Line 
  980.       diagrams. 
  981.  
  982.       If you need help, see How do I... View a trace file in any of the five 
  983.       diagrams? 
  984.  
  985.    3. Highlight the area between the events of interest in any one of the open 
  986.       diagrams. To highlight an area: 
  987.  
  988.         a. Click and hold mouse button one on the first event. 
  989.  
  990.         b. While holding mouse button one, drag the pointer to the last event. 
  991.  
  992.         c. Release the mouse button. 
  993.  
  994.    4. Select the Correlation... choice from the Options menu in the highlighted 
  995.       diagram. 
  996.  
  997.    5. Click on the Select all push button in the Correlation window, and then 
  998.       click on the OK 
  999.  
  1000.  Since all three diagrams are time-based, there is a time associated with both 
  1001.  the first and last events in your highlighted area. After correlating with the 
  1002.  other diagrams, the events corresponding to this same time range are 
  1003.  highlighted in each of the diagrams. 
  1004.  
  1005.  
  1006. ΓòÉΓòÉΓòÉ 16. View thread interactions in a multithreaded program? ΓòÉΓòÉΓòÉ
  1007.  
  1008. To view thread interactions in a multithreaded program, do the following: 
  1009.  
  1010.    1. Create a trace file. 
  1011.  
  1012.       If you need help, see How do I... Create a trace file? 
  1013.  
  1014.    2. Open the trace file in the Call Nesting or Time Line diagram. 
  1015.  
  1016.       If you need help, see How do I... View a trace file in any of the five 
  1017.       diagrams? 
  1018.  
  1019.    3. Scroll through the diagram using the vertical scroll bar. A horizontal 
  1020.       dotted line indicates that your program has switched from one thread to 
  1021.       another. This allows you to see the flow of program execution across 
  1022.       threads and may be helpful in identifying timing problems and program 
  1023.       deadlocks. 
  1024.  
  1025.  
  1026. ΓòÉΓòÉΓòÉ 17. Determine the elapsed time between two events? ΓòÉΓòÉΓòÉ
  1027.  
  1028. To see the elapsed time between two events, do the following: 
  1029.  
  1030.    1. Create a trace file. 
  1031.  
  1032.       If you need help, see How do I... Create a trace file? 
  1033.  
  1034.    2. Open the trace file in the Time Line diagram. 
  1035.  
  1036.       If you need help, see How do I... View a trace file in any of the five 
  1037.       diagrams? 
  1038.  
  1039.    3. Highlight the area between the two events in the Time Line diagram. To 
  1040.       highlight an area: 
  1041.  
  1042.         a. Click and hold mouse button one on the first event. 
  1043.  
  1044.         b. While holding mouse button one, drag the pointer to the second 
  1045.            event. 
  1046.  
  1047.         c. Release the mouse button. 
  1048.  
  1049.    4. Check the Status area of the Time Line diagram for the elapsed time 
  1050.       between events. Elapsed time is displayed at the end of the Selected 
  1051.       region: line. 
  1052.  
  1053.  
  1054. ΓòÉΓòÉΓòÉ 18. Determine which functions in my program should be inlined? ΓòÉΓòÉΓòÉ
  1055.  
  1056. To determine which functions in your program are good candidates for inlining: 
  1057.  
  1058.    1. Create a trace file. 
  1059.  
  1060.       If you need help, see How do I... Create a trace file? 
  1061.  
  1062.    2. Open the trace file in the Statistics diagram. 
  1063.  
  1064.       If you need help, see How do I... View a Trace file in any of the five 
  1065.       diagrams? 
  1066.  
  1067.    3. Look for functions in the Statistics diagram that were called frequently 
  1068.       and had small average executable times. These functions may be good 
  1069.       candidates for inlining. 
  1070.  
  1071.       Note:  Functions that appear in the Statistics diagram were not inlined. 
  1072.       If an inlined function appears in the Statistics diagram, the compiler 
  1073.       chose not to inline it. 
  1074.  
  1075.  
  1076. ΓòÉΓòÉΓòÉ 19. Find infinite loops and deadlocks in my program? ΓòÉΓòÉΓòÉ
  1077.  
  1078. To find suspected infinite loops or deadlocks in your program, do the 
  1079. following: 
  1080.  
  1081.    1. Create a trace file. 
  1082.  
  1083.       If you need help, see How do I... Create a trace file? 
  1084.  
  1085.    2. Open the trace file in the Call Nesting diagram. 
  1086.  
  1087.       If you need help, see How do I... View a Trace file in any of the five 
  1088.       diagrams? 
  1089.  
  1090.    3. Scroll to the bottom of the Call Nesting diagram. If an infinite loop or 
  1091.       deadlock exists, the last function called is the one that contains the 
  1092.       problem. 
  1093.  
  1094.  
  1095. ΓòÉΓòÉΓòÉ 20. Exit the Performance Analyzer? ΓòÉΓòÉΓòÉ
  1096.  
  1097. If you want to exit the Performance Analyzer and are not in the process of 
  1098. creating a trace file, do the following: 
  1099.  
  1100.    1. Select the Exit the Performance Analyzer choice from one of the following 
  1101.       menus: 
  1102.  
  1103.           File menu on the Performance Analyzer - Window Manager window 
  1104.           Application menu on the Trace Generation window 
  1105.           Trace file menu on any of the diagrams. 
  1106.  
  1107.    2. Select Yes when prompted. 
  1108.  
  1109.  If you want to exit the Performance Analyzer while a trace file is being 
  1110.  created, do the following: 
  1111.  
  1112.    1. Click on the Stop push button on the Application Monitor window. 
  1113.  
  1114.    2. Click on the Cancel push button on the Analyze Trace window. 
  1115.  
  1116.    3. Select the Exit the Performance Analyzer choice from the File menu on the 
  1117.       Performance Analyzer - Window Manager window. 
  1118.  
  1119.    4. Select Yes when prompted. 
  1120.  
  1121.  
  1122. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  1123.  
  1124. Application Programming Interface 
  1125.  
  1126.  
  1127. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  1128.  
  1129. Trademark of International Business Machines Corporation. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  1133.  
  1134. The maximum number of calls made is the number of calls made between the two 
  1135. functions that contained the greatest number of calls between them. 
  1136.  
  1137.  
  1138. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  1139.  
  1140. The maximum execution time is the amount of time required to execute the 
  1141. function that has the greatest execution time.