mtr@ukc.ac.uk (M.T.Russell) (06/01/91)
Version 2.31 of the ups debugger is now available at an FTP site near you. This release fixes various bugs in 2.28, the most important being that ups did not run under Ultrix 4.1 on the DECstation and that it failed to work with SunOS XView applications. It also fixes a serious bug with floating point in version 2.30. This (long) article describes what ups is and how to obtain it. [Apologies if you have seen this already - this is a repost.] SUMMARY ------- + Version 2.31 of ups is now available by anonymous FTP. + Changes from 2.28: it works under Ultrix 4.1 and with XView applications, plus various other bug fixes. + Changes from 2.30: bug in display of double variables fixed, plus a few other bug fixes. + Unless there are serious bugs this will be the last release for a while. + There are new FTP sites for people in Europe and the UK, as well as ways to obtain ups for those without FTP access. + There is a mailing list ups-users@ukc.ac.uk for bug reports and new release announcements. Send add/delete requests to ups-users-request@ukc.ac.uk. Future bug fix releases of ups will be announced on the mailing list only, to avoid cluttering the newsgroups. WHAT IS UPS? ------------ Ups is a source level C debugger that runs under X11 or SunView on Suns (SPARC, Sun 3 and 386i) and under X11 on DECstations and VAXen running Ultrix (see below for details of supported configurations). Ups runs in a window with two major regions: one showing the current state of the target program data and the other showing the currently executing source code. A key feature of ups is that the variables display is persistent: when you add a variable to the display it stays there as you step through the code. The current stack trace (which function called which) is always visible. Ups includes a C interpreter which allows you to add fragments of code simply by editing them into the source window (the source file itself is not modified). This lets you add debugging printf calls without recompiling, relinking (or even restarting) the target program. You can also add conditional breakpoints in a natural way - you just add a statement like "if (i == 73) #stop" at the appropriate place in the source window. Some things you can do with ups: + Add variables to the display by simply clicking on them in the source window. + Expand (recursively) structures and unions to show their members. + Assign to variables by editing the displayed value. + Add breakpoints by pointing with the mouse at the line where you want execution to stop. + Add interpreted code at any breakpoint, including code that calls compiled functions and assigns to variables. It's hard to describe an interactive application in a few paragraphs of text - the best way to see what ups is like is to grab a copy and try it. There's a walkthrough debugging session in the manual page: if you work through this and are not hooked at the end of it then I'll give you your money back :-) HOW UPS DIFFERS FROM XXGDB, XDBX AND DBXTOOL -------------------------------------------- The key implementation difference between ups and the various X front ends for dbx and gdb is that ups is not a front end for a command based debugger. Xdbx and xgdb give you a convenient way to invoke the underlying debugger's commands, but it is fairly clear in both that you are talking to a text based debugger. Ups in the other hand is a complete native debugger implementation; there is no underlying command language. An example: to print the value of a variable in xgdb you select (by dragging) a variable name and then click on `print' in the menu. Xgdb passes the print command with the selection to gdb and displays the result. By contrast in ups you click the mouse over a variable name and it is added to the display. Once the variable is added to the display it stays there, so you can watch it change as you step through the code. If the variable happens to be a structure or a pointer to a structure you can `expand' it to show its members. Again, the structure members thus added remain in the display until you get rid of them so you can watch their values change as you execute the code. Of course there is a downside to not talking to an existing debugger: you lose portability. Ups is machine dependent - a port to a new architecture is a significant effort. I think the benefits outweigh the cost. SUPPORTED SYSTEMS ----------------- The current list of supported configurations is: Architecture OS version Window system ------------ ---------- ------------- SPARC SunOS 4.X X11 or SunView 1 Sun 3 SunOS 3.5 or 4.X X11 or SunView 1 Sun 386i SunOS 4.0.X X11 or SunView 1 DECstation Ultrix 3.1 X11 VAX Ultrix 3.1 X11 HLH Clipper 4.3BSD X11 [ You've never heard of the HLH Clipper? Don't worry, you're not alone. ] Ups should also run under Ultrix 4.X on the DECstation 3100 and 5000. I am unable to try this locally as our DECstations don't run Ultrix 4.X but I have tested ups using binaries produced by the 4.1 C compiler and linker. Ups has FORTRAN support on the Sun 3, VAX and SPARC but this is not as stable or complete as the C support. Ups may also work with gcc (even with the -O flag). This is known to work pretty well on the SPARC; your mileage may vary on other systems. Ups will probably work on OS releases other than these; the list above describes the OS versions on the machines that I have access to. In particular I have built ups for a VAX 750 running 4.3BSD and X11 - it appeared to work OK but wasn't tested thoroughly or used in anger. Ups is unavoidably architecture and OS dependent as it knows about things like the ptrace() system call interface and object file symbol table formats. A port to a new architecture is likely to take several weeks. OBTAINING THE RELEASE --------------------- The release is available by anonymous FTP from several sites. The full release is a compressed tar file called ups-2.31.tar.Z. At some sites there are copies of the top level README file and patches from releases 2.28 and 2.30. The current list of files is: Size Checksum Name What ---- -------- ---- ---- 81381 02487 ups-2.28-to-2.30.patch.Z Patch from 2.28 to 2.30 23964 49727 ups-2.30-to-2.31.patch.Z Patch from 2.30 to 2.31 963435 37531 ups-2.31.tar.Z The full 2.31 release 9758 14948 ups-2.31.README A copy of the top level README file The checksums are as reported by the `sum' program. Note that you only need to pull one of these files: either the full release (ups-2.31.tar.Z) or one of the patch files if you already have release 2.28 or 2.31. The ups-2.31.README file is there so you can look at a brief description of ups to decide whether you want it or not. All the files are binary except the README file, so don't forget to set binary mode in FTP when you transfer them. Here are the anonymous FTP sites: Name: export.lcs.mit.edu IP address: 18.30.0.238 Directory: contrib Files: ups-2.31.tar.Z ups-2.31.README ups-2.28-to-2.30.patch.Z ups-2.30-to-2.31.patch.Z Name: uunet.uu.net IP address: 192.48.96.2 Directory: tmp Files: ups-2.31.tar.Z ups-2.31.README Note: tmp on uunet is cleared every four days based on lack of access, so you might find the files have gone from this site. Name: ftp.informatik.tu-muenchen.de IP address: 131.159.0.110 Directory: pub/X.V11R4/net/clients Files: ups-2.31.tar.Z ups-2.28-to-2.30.patch.Z ups-2.30-to-2.31.patch.Z Name: ftp.uni-koeln.de IP address: 134.95.132.2 Directory: pub/windows/xcontrib Files: ups-2.31.tar.Z ups-2.31.README ups-2.28-to-2.30.patch.Z ups-2.30-to-2.31.patch.Z For UK sites connected to JANET, the distribution is available by ni-ftp. The files are: <NETLIB>unix/ups/ups-2.31.README from uk.ac.ukc.harrier <NETLIB>unix/ups/ups-2.31.tar.Z from uk.ac.ukc.harrier user guest password <your email address> Please don't ask me to mail ups to you: it is far too big for that. If you don't have FTP access you could try the mail-to-FTP server at Princeton (send a message containing the word HELP to BITFTP@PUCC.Princeton.edu for details). If you can't get the release any other way I am willing to write a tape. Send a reply-paid envelope containing the tape to: Mark Russell Computing Laboratory The University Canterbury Kent CT2 7NZ England I can write Sun cartridge tapes (QIC-11, QIC-24 or QIC-150), 9 track tapes at 1600 or 6250 bpi and DEC TK50 or TK70 tapes. THE UPS-USERS MAILING LIST -------------------------- I've had lots of mail from people who have pulled and built version 2.28. Several people asked to be kept up to date about new versions and bug fixes. There doesn't seem to be an appropriate newsgroup for this so I have set up a mailing list. I don't think the volume will be high: I see the list primarily as a way to get news of bugs and fixes quickly to interested users. The list address is ups-users@ukc.ac.uk Send requests to be added to or deleted from the list to: ups-users-request@ukc.ac.uk Please send bug reports to ups-users@ukc.ac.uk rather than to me personally. That way everyone else sees the report (and possibly a patch to fix it). I will use the mailing list to announce bugfix releases of ups. I'll only post news for major new releases. QUESTIONS AND ANSWERS --------------------- Here are answers to some questions that came up repeatedly in the email that I got: Q What does ups stand for? A It's not an acronym - it's short for `oops' as in `Oops - my program just dumped core'. In particular, UPS (in capitals) means a parcel service or a device to keep your computer running - the debugger is called ups. Q How does ups differ from xdbx and xgdb? A Ups is a complete native debugger which was designed as a window and mouse based application from the beginning. Xdbx and xgdb are front ends to command based debuggers. They are a convenient interface to the underlying debugger, but the command-based nature shows through. There are no typed commands in ups. Q Does ups support C++? A No, sorry - only C. If someone wants to hack it ... Q Why doesn't `ups.Foreground: green' work? A In the 2.28 release ups looked for resources under the last component of the pathname it was invoked by (e.g. `x11ups'). This wasn't documented in the manual page. In 2.31 ups tries `Ups' as a name if `x11ups' (or whatever) doesn't match. Thus `Ups.resource: value' will always work. Q Why do you use yellow to highlight text? It is unreadable on my white background. A It shows up well with my choice of colors (white on a dark blue background). You can change the color used with the HighlightColor and EditlinesColor resources (which are now documented in the manual page). If you want to try ups quickly without adding resource file entries try the -rv (reverse video) flag. Q Why don't you have Imakefiles? A Because last time I tangled with imake it defeated me. If someone is willing to send me an imakefile that will build ups (without rearranging the source tree) I will be happy to include it with the release. CHANGES BETWEEN VERSIONS 2.30 AND 2.31 -------------------------------------- + Version 2.30 had a nasty bug with floating point: incorrect values were shown for double variables. This is fixed in 2.31. + Ups on the SPARC showed incorrect values for sub-word formal parameter types (char and short) that are widened to int. + Ups has problems with functions that pass and return structures and unions by value. These are now documented in the BUGS section of the manual page. + Ups now runs in mono rather than exiting if it can't allocate colormap entries on a color display. CHANGES BETWEEN VERSIONS 2.28 AND 2.30 -------------------------------------- + Ups did not work with Ultrix 4.1 due to changes in the symbol table format. Thanks to those who reported this and especially to Randy Buckland at NCSU who diagnosed the problem. This version of ups should work with Ultrix 4.1. Let me know if there are problems. + A bug in the symbol table code caused ups to fail under SunOS if header files were nested more than eight deep. This broke ups with XView applications. + The %v $printf format character now prints the names and values of the members of a struct or union if you pass it a struct or union pointer. This was suggested by Paul Maisano at the Australian AI Institute. + A new X resource TabWidth specifies how many spaces there are to a tab stop in the source window. + Various previously undocumented X resources are now documented in the manual page. + The file ups/doc/sample.c was missing from the 2.28 distribution - it is now included. + Various typos and mistakes in the manual page have been cleaned up - thanks to everyone who reported these. + Other minor bug fixes. If you have read this far, congratulations. Have fun. Mark