Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!decwrl!sun!guy From: guy@sun.UUCP Newsgroups: net.lang.c,net.unix-wizards,net.unix Subject: Re: Help using dbx Message-ID: <3578@sun.uucp> Date: Thu, 24-Apr-86 20:55:48 EST Article-I.D.: sun.3578 Posted: Thu Apr 24 20:55:48 1986 Date-Received: Sat, 26-Apr-86 06:36:59 EST References: <461@aoa.UUCP> Distribution: net Organization: Sun Microsystems, Inc. Lines: 69 Xref: watmath net.lang.c:8736 net.unix-wizards:17808 net.unix:7708 > By the way, I am running 'dbx' on a Sun workstation. Which is different from the 4.2BSD "dbx", which is in turn different from the 4.3BSD "dbx", so note that this discussion applies only to the Sun version. > 1. I'd like to be able to specify the format in which a variable is to be > displayed. To print the variable "foo" in a particular format, &foo/ should suffice. > If I have a variable (char *cp), I could do the following with 'sdb': ... In this case, you don't want to display "cp", you want to display what "cp" points to. The Sun UNIX 3.2 version (probably the 3.0 version as well) will print what a "char *" points to, as a string, as well as its value. If you say "print *cp", it will print the char that "cp" points to. > 2. The man page for 'dbx' claims that the command to display a memory > location is: ... > ... rather than showing me the next location. This makes it quite a chore > to examine an array. Arrays of structures are even worse. The fact that the man page says anything indicates you definitely don't have 3.0. I don't know what 3.0 added. First, why are you using the display command to examine an array? "print array[N]" seems sufficient to examine the Nth element. If the entire array is small enough that printing it in its entirety is reasonable, try "print array". Second, if you've just displayed a location using "/", you don't want to use something like a naked "/" to display the same location again. You want to display the next location, which can be done (at least in 3.0 and later releases) using "+/". > 3. With 'sdb', I could display lines of code relative to the current line. > 'dbx' appears to limit me to specifying absolute line numbers. This > means that anytime I hit a breakpoint and want to see some context, I > have to ... "l" by itself will, after hitting a breakpoint, print the line the breakpoint occurred on and the next 10 lines. Repeating the "l" will step through the file. Unfortunately, this doesn't give you a window *around* the breakpoint. If you have "dbxtool", and are doing your debugging on a workstation, you can use that. > 4. A common construct in C is a linked list of structures. ... > (discussion of stepping through the list) What's needed here is a notion of variables inside "dbx", so that you can have an alias which prints whatever points to and sets to ->next. This is a more general solution than what "sdb" offers; I can imagine data structures which "sdb" would not be able to scan through conveniently. Unfortunately, "dbx" doesn't have this notion. The 4.3BSD one might. Perhaps "dbx" should have more such programming-language characteristics, so that it could be "programmed" to display more complicated data structures. I also note from this an other examples that you seem to be using "sdb" and "dbx" as a symbolic debugger which knows about source lines, but not one which knows about data structures. "dbx" can be used that way, but it wasn't really intended to be so used. -- Guy Harris {ihnp4, decvax, seismo, decwrl, ...}!sun!guy guy@sun.arpa