|
|
1.1 root 1: The most important difference is that adb now uses /proc to control programs,
2: rather than ptrace. The most noticeable one is that local variables work.
3:
4: Process control:
5: adb uses /proc. One thing goes away: you can't send a specific signal any
6: more (:s and :c). `:c 0' still continues the process being debugged without
7: sending a signal; `:c' still sends the signal with which the process stopped.
8: `:c n' where n is nonzero does the same as `:c'.
9:
10: If the right-hand file is a process file (/proc/something), adb recognizes
11: the fact, sets up mapping sensibly, and in particular figures out where the
12: registers are. If the process in question is still running, of course, the
13: registers may change underneath you. This will be made less severe
14: eventually. It will also eventually be possible to take over such a process
15: (stop it, set breakpoints, &c).
16:
17: Local variables:
18: When debugging programs compiled with the -g option, adb can examine local
19: variables, roughly as it could on the PDP-11. For example, main.argc/X
20: prints 4 bytes of argc in hex from the outermost stack frame associated
21: with main. $C (traceback with locals) works too. Register variables work,
22: even if they're in registers; they appear to have funny addresses with a
23: % in front (which means they live in a funny `register' address space;
24: you can type the % addresses if you want, but you can't store them in a
25: variable and expect them to work).
26:
27: Mapping:
28: No longer are there just two maps for each file; there are several, and
29: each is tagged with the type of thing mapped (instruction space, data
30: space, user block). ? tries for instruction space; / tries for data
31: space; ?* (/*) tries data (instruction). Even on the VAX, these are
32: different kinds of space; however, if a desired instruction space address
33: isn't found, data space is checked too, so things still work naturally.
34: If a process isn't using separate ID space (always true on the VAX),
35: its text segment is considered to be data space.
36:
37: a.outs on the left-hand side, and cores and process files on the right-
38: hand side, are recognized and mapped accordingly. Other kinds of files
39: are mapped in the time-honoured way (a single large, direct map of data).
40: The ?m and /m commands affect the first map; ?*m and /*m affect the
41: second map; what that means depends on the kind of file; in no case is
42: the already-set type of thing changed. This is a foggy (and probably
43: buggy) area.
44:
45: Kernel debugging:
46: The -k option is gone. In its place are two commands:
47: address$k sets adb's idea of the system base register;
48: address is a physical address, usually Sysmap
49: address$u sets the address of a pcb; address may be either a physical pcb
50: address (as found in PCBB and masterpcbb) or the kernel virtual
51: address of the page table entry for the pcb. (The latter curious
52: quantity is stored in the p_addr.)
53: 0$k turns off virtual address mapping; 0$u turns off mapping for user space.
54: $<crash will set up the registers and mapping from a standard crash dump.
55:
56: Miscellaneous appearances:
57: Some attempt has been made to print things in forms that can be reused
58: as input. Addresses are printed as `main+0d/' or `main+0d?' rather than
59: `main+d:'. 0$d turns on magic variable radix mode, like the old default
60: on the PDP-11: numbers are read in in hex, octal, or decimal if they begin
61: with #, 0, or something else; octal and hex numbers are printed with leading
62: 0 and # to match.
63:
64: If you have a very old kernel, it will take adb up to 10 seconds to learn
65: that the process you're watching has terminated. The recent kernel change
66: that broke pi doesn't affect adb, though. I don't know why it hurts pi.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.