gitlab.com/Raven-IO/raven-delve@v1.22.4/Documentation/cli/README.md (about) 1 # Configuration and Command History 2 3 If `$XDG_CONFIG_HOME` is set, then configuration and command history files are located in `$XDG_CONFIG_HOME/dlv`. Otherwise, they are located in `$HOME/.config/dlv` on Linux and `$HOME/.dlv` on other systems. 4 5 The configuration file `config.yml` contains all the configurable options and their default values. The command history is stored in `.dbg_history`. 6 7 # Commands 8 9 ## Running the program 10 11 Command | Description 12 --------|------------ 13 [call](#call) | Resumes process, injecting a function call (EXPERIMENTAL!!!) 14 [continue](#continue) | Run until breakpoint or program termination. 15 [next](#next) | Step over to next source line. 16 [next-instruction](#next-instruction) | Single step a single cpu instruction, skipping function calls. 17 [rebuild](#rebuild) | Rebuild the target executable and restarts it. It does not work if the executable was not built by delve. 18 [restart](#restart) | Restart process. 19 [rev](#rev) | Reverses the execution of the target program for the command specified. 20 [rewind](#rewind) | Run backwards until breakpoint or start of recorded history. 21 [step](#step) | Single step through program. 22 [step-instruction](#step-instruction) | Single step a single cpu instruction. 23 [stepout](#stepout) | Step out of the current function. 24 25 26 ## Manipulating breakpoints 27 28 Command | Description 29 --------|------------ 30 [break](#break) | Sets a breakpoint. 31 [breakpoints](#breakpoints) | Print out info for active breakpoints. 32 [clear](#clear) | Deletes breakpoint. 33 [clearall](#clearall) | Deletes multiple breakpoints. 34 [condition](#condition) | Set breakpoint condition. 35 [on](#on) | Executes a command when a breakpoint is hit. 36 [toggle](#toggle) | Toggles on or off a breakpoint. 37 [trace](#trace) | Set tracepoint. 38 [watch](#watch) | Set watchpoint. 39 40 41 ## Viewing program variables and memory 42 43 Command | Description 44 --------|------------ 45 [args](#args) | Print function arguments. 46 [display](#display) | Print value of an expression every time the program stops. 47 [examinemem](#examinemem) | Examine raw memory at the given address. 48 [locals](#locals) | Print local variables. 49 [print](#print) | Evaluate an expression. 50 [regs](#regs) | Print contents of CPU registers. 51 [set](#set) | Changes the value of a variable. 52 [vars](#vars) | Print package variables. 53 [whatis](#whatis) | Prints type of an expression. 54 55 56 ## Listing and switching between threads and goroutines 57 58 Command | Description 59 --------|------------ 60 [goroutine](#goroutine) | Shows or changes current goroutine 61 [goroutines](#goroutines) | List program goroutines. 62 [thread](#thread) | Switch to the specified thread. 63 [threads](#threads) | Print out info for every traced thread. 64 65 66 ## Viewing the call stack and selecting frames 67 68 Command | Description 69 --------|------------ 70 [deferred](#deferred) | Executes command in the context of a deferred call. 71 [down](#down) | Move the current frame down. 72 [frame](#frame) | Set the current frame, or execute command on a different frame. 73 [stack](#stack) | Print stack trace. 74 [up](#up) | Move the current frame up. 75 76 77 ## Other commands 78 79 Command | Description 80 --------|------------ 81 [check](#check) | Creates a checkpoint at the current position. 82 [checkpoints](#checkpoints) | Print out info for existing checkpoints. 83 [clear-checkpoint](#clear-checkpoint) | Deletes checkpoint. 84 [config](#config) | Changes configuration parameters. 85 [disassemble](#disassemble) | Disassembler. 86 [dump](#dump) | Creates a core dump from the current process state 87 [edit](#edit) | Open where you are in $DELVE_EDITOR or $EDITOR 88 [exit](#exit) | Exit the debugger. 89 [funcs](#funcs) | Print list of functions. 90 [help](#help) | Prints the help message. 91 [libraries](#libraries) | List loaded dynamic libraries 92 [list](#list) | Show source code. 93 [packages](#packages) | Print list of packages. 94 [source](#source) | Executes a file containing a list of delve commands 95 [sources](#sources) | Print list of source files. 96 [target](#target) | Manages child process debugging. 97 [transcript](#transcript) | Appends command output to a file. 98 [types](#types) | Print list of types 99 100 ## args 101 Print function arguments. 102 103 [goroutine <n>] [frame <m>] args [-v] [<regex>] 104 105 If regex is specified only function arguments with a name matching it will be returned. If -v is specified more information about each function argument will be shown. 106 107 108 ## break 109 Sets a breakpoint. 110 111 break [name] [locspec] [if <condition>] 112 113 Locspec is a location specifier in the form of: 114 115 * *<address> Specifies the location of memory address address. address can be specified as a decimal, hexadecimal or octal number 116 * <filename>:<line> Specifies the line in filename. filename can be the partial path to a file or even just the base name as long as the expression remains unambiguous. 117 * <line> Specifies the line in the current file 118 * +<offset> Specifies the line offset lines after the current one 119 * -<offset> Specifies the line offset lines before the current one 120 * <function>[:<line>] Specifies the line inside function. 121 The full syntax for function is <package>.(*<receiver type>).<function name> however the only required element is the function name, 122 everything else can be omitted as long as the expression remains unambiguous. For setting a breakpoint on an init function (ex: main.init), 123 the <filename>:<line> syntax should be used to break in the correct init function at the correct location. 124 * /<regex>/ Specifies the location of all the functions matching regex 125 126 If locspec is omitted a breakpoint will be set on the current line. 127 128 If you would like to assign a name to the breakpoint you can do so with the form: 129 130 break mybpname main.go:4 131 132 Finally, you can assign a condition to the newly created breakpoint by using the 'if' postfix form, like so: 133 134 break main.go:55 if i == 5 135 136 Alternatively you can set a condition on a breakpoint after created by using the 'on' command. 137 138 See also: "help on", "help cond" and "help clear" 139 140 Aliases: b 141 142 ## breakpoints 143 Print out info for active breakpoints. 144 145 breakpoints [-a] 146 147 Specifying -a prints all physical breakpoint, including internal breakpoints. 148 149 Aliases: bp 150 151 ## call 152 Resumes process, injecting a function call (EXPERIMENTAL!!!) 153 154 call [-unsafe] <function call expression> 155 156 Current limitations: 157 - only pointers to stack-allocated objects can be passed as argument. 158 - only some automatic type conversions are supported. 159 - functions can only be called on running goroutines that are not 160 executing the runtime. 161 - the current goroutine needs to have at least 256 bytes of free space on 162 the stack. 163 - functions can only be called when the goroutine is stopped at a safe 164 point. 165 - calling a function will resume execution of all goroutines. 166 - only supported on linux's native backend. 167 168 169 170 ## check 171 Creates a checkpoint at the current position. 172 173 checkpoint [note] 174 175 The "note" is arbitrary text that can be used to identify the checkpoint, if it is not specified it defaults to the current filename:line position. 176 177 Aliases: checkpoint 178 179 ## checkpoints 180 Print out info for existing checkpoints. 181 182 183 ## clear 184 Deletes breakpoint. 185 186 clear <breakpoint name or id> 187 188 189 ## clear-checkpoint 190 Deletes checkpoint. 191 192 clear-checkpoint <id> 193 194 Aliases: clearcheck 195 196 ## clearall 197 Deletes multiple breakpoints. 198 199 clearall [<locspec>] 200 201 If called with the locspec argument it will delete all the breakpoints matching the locspec. If locspec is omitted all breakpoints are deleted. 202 203 204 ## condition 205 Set breakpoint condition. 206 207 condition <breakpoint name or id> <boolean expression>. 208 condition -hitcount <breakpoint name or id> <operator> <argument>. 209 condition -per-g-hitcount <breakpoint name or id> <operator> <argument>. 210 condition -clear <breakpoint name or id>. 211 212 Specifies that the breakpoint, tracepoint or watchpoint should break only if the boolean expression is true. 213 214 See [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions. 215 216 With the -hitcount option a condition on the breakpoint hit count can be set, the following operators are supported 217 218 condition -hitcount bp > n 219 condition -hitcount bp >= n 220 condition -hitcount bp < n 221 condition -hitcount bp <= n 222 condition -hitcount bp == n 223 condition -hitcount bp != n 224 condition -hitcount bp % n 225 226 The -per-g-hitcount option works like -hitcount, but use per goroutine hitcount to compare with n. 227 228 With the -clear option a condition on the breakpoint can removed. 229 230 The '% n' form means we should stop at the breakpoint when the hitcount is a multiple of n. 231 232 Examples: 233 234 cond 2 i == 10 breakpoint 2 will stop when variable i equals 10 235 cond name runtime.curg.goid == 5 breakpoint 'name' will stop only on goroutine 5 236 cond -clear 2 the condition on breakpoint 2 will be removed 237 238 239 Aliases: cond 240 241 ## config 242 Changes configuration parameters. 243 244 config -list 245 246 Show all configuration parameters. 247 248 config -save 249 250 Saves the configuration file to disk, overwriting the current configuration file. 251 252 config <parameter> <value> 253 254 Changes the value of a configuration parameter. 255 256 config substitute-path <from> <to> 257 config substitute-path <from> 258 config substitute-path -clear 259 260 Adds or removes a path substitution rule, if -clear is used all 261 substitute-path rules are removed. Without arguments shows the current list 262 of substitute-path rules. 263 See also [Documentation/cli/substitutepath.md](//github.com/go-delve/delve/tree/master/Documentation/cli/substitutepath.md) for how the rules are applied. 264 265 config alias <command> <alias> 266 config alias <alias> 267 268 Defines <alias> as an alias to <command> or removes an alias. 269 270 config debug-info-directories -add <path> 271 config debug-info-directories -rm <path> 272 config debug-info-directories -clear 273 274 Adds, removes or clears debug-info-directories. 275 276 277 ## continue 278 Run until breakpoint or program termination. 279 280 continue [<locspec>] 281 282 Optional locspec argument allows you to continue until a specific location is reached. The program will halt if a breakpoint is hit before reaching the specified location. 283 284 For example: 285 286 continue main.main 287 continue encoding/json.Marshal 288 289 290 Aliases: c 291 292 ## deferred 293 Executes command in the context of a deferred call. 294 295 deferred <n> <command> 296 297 Executes the specified command (print, args, locals) in the context of the n-th deferred call in the current frame. 298 299 300 ## disassemble 301 Disassembler. 302 303 [goroutine <n>] [frame <m>] disassemble [-a <start> <end>] [-l <locspec>] 304 305 If no argument is specified the function being executed in the selected stack frame will be executed. 306 307 -a <start> <end> disassembles the specified address range 308 -l <locspec> disassembles the specified function 309 310 Aliases: disass 311 312 ## display 313 Print value of an expression every time the program stops. 314 315 display -a [%format] <expression> 316 display -d <number> 317 318 The '-a' option adds an expression to the list of expression printed every time the program stops. The '-d' option removes the specified expression from the list. 319 320 If display is called without arguments it will print the value of all expression in the list. 321 322 323 ## down 324 Move the current frame down. 325 326 down [<m>] 327 down [<m>] <command> 328 329 Move the current frame down by <m>. The second form runs the command on the given frame. 330 331 332 ## dump 333 Creates a core dump from the current process state 334 335 dump <output file> 336 337 The core dump is always written in ELF, even on systems (windows, macOS) where this is not customary. For environments other than linux/amd64 threads and registers are dumped in a format that only Delve can read back. 338 339 340 ## edit 341 Open where you are in $DELVE_EDITOR or $EDITOR 342 343 edit [locspec] 344 345 If locspec is omitted edit will open the current source file in the editor, otherwise it will open the specified location. 346 347 Aliases: ed 348 349 ## examinemem 350 Examine raw memory at the given address. 351 352 Examine memory: 353 354 examinemem [-fmt <format>] [-count|-len <count>] [-size <size>] <address> 355 examinemem [-fmt <format>] [-count|-len <count>] [-size <size>] -x <expression> 356 357 Format represents the data format and the value is one of this list (default hex): bin(binary), oct(octal), dec(decimal), hex(hexadecimal). 358 Length is the number of bytes (default 1) and must be less than or equal to 1000. 359 Address is the memory location of the target to examine. Please note '-len' is deprecated by '-count and -size'. 360 Expression can be an integer expression or pointer value of the memory location to examine. 361 362 For example: 363 364 x -fmt hex -count 20 -size 1 0xc00008af38 365 x -fmt hex -count 20 -size 1 -x 0xc00008af38 + 8 366 x -fmt hex -count 20 -size 1 -x &myVar 367 x -fmt hex -count 20 -size 1 -x myPtrVar 368 369 Aliases: x 370 371 ## exit 372 Exit the debugger. 373 374 exit [-c] 375 376 When connected to a headless instance started with the --accept-multiclient, pass -c to resume the execution of the target process before disconnecting. 377 378 Aliases: quit q 379 380 ## frame 381 Set the current frame, or execute command on a different frame. 382 383 frame <m> 384 frame <m> <command> 385 386 The first form sets frame used by subsequent commands such as "print" or "set". 387 The second form runs the command on the given frame. 388 389 390 ## funcs 391 Print list of functions. 392 393 funcs [<regex>] 394 395 If regex is specified only the functions matching it will be returned. 396 397 398 ## goroutine 399 Shows or changes current goroutine 400 401 goroutine 402 goroutine <id> 403 goroutine <id> <command> 404 405 Called without arguments it will show information about the current goroutine. 406 Called with a single argument it will switch to the specified goroutine. 407 Called with more arguments it will execute a command on the specified goroutine. 408 409 Aliases: gr 410 411 ## goroutines 412 List program goroutines. 413 414 goroutines [-u|-r|-g|-s] [-t [depth]] [-l] [-with loc expr] [-without loc expr] [-group argument] [-chan expr] [-exec command] 415 416 Print out info for every goroutine. The flag controls what information is shown along with each goroutine: 417 418 -u displays location of topmost stackframe in user code (default) 419 -r displays location of topmost stackframe (including frames inside private runtime functions) 420 -g displays location of go instruction that created the goroutine 421 -s displays location of the start function 422 -t displays goroutine's stacktrace (an optional depth value can be specified, default: 10) 423 -l displays goroutine's labels 424 425 If no flag is specified the default is -u, i.e. the first frame within the first 30 frames that is not executing a runtime private function. 426 427 FILTERING 428 429 If -with or -without are specified only goroutines that match the given condition are returned. 430 431 To only display goroutines where the specified location contains (or does not contain, for -without and -wo) expr as a substring, use: 432 433 goroutines -with (userloc|curloc|goloc|startloc) expr 434 goroutines -w (userloc|curloc|goloc|startloc) expr 435 goroutines -without (userloc|curloc|goloc|startloc) expr 436 goroutines -wo (userloc|curloc|goloc|startloc) expr 437 438 Where: 439 userloc: filter by the location of the topmost stackframe in user code 440 curloc: filter by the location of the topmost stackframe (including frames inside private runtime functions) 441 goloc: filter by the location of the go instruction that created the goroutine 442 startloc: filter by the location of the start function 443 444 To only display goroutines that have (or do not have) the specified label key and value, use: 445 446 goroutines -with label key=value 447 goroutines -without label key=value 448 449 To only display goroutines that have (or do not have) the specified label key, use: 450 451 goroutines -with label key 452 goroutines -without label key 453 454 To only display goroutines that are running (or are not running) on a OS thread, use: 455 456 457 goroutines -with running 458 goroutines -without running 459 460 To only display user (or runtime) goroutines, use: 461 462 goroutines -with user 463 goroutines -without user 464 465 CHANNELS 466 467 To only show goroutines waiting to send to or receive from a specific channel use: 468 469 goroutines -chan expr 470 471 Note that 'expr' must not contain spaces. 472 473 GROUPING 474 475 goroutines -group (userloc|curloc|goloc|startloc|running|user) 476 477 Where: 478 userloc: groups goroutines by the location of the topmost stackframe in user code 479 curloc: groups goroutines by the location of the topmost stackframe 480 goloc: groups goroutines by the location of the go instruction that created the goroutine 481 startloc: groups goroutines by the location of the start function 482 running: groups goroutines by whether they are running or not 483 user: groups goroutines by weather they are user or runtime goroutines 484 485 486 Groups goroutines by the given location, running status or user classification, up to 5 goroutines per group will be displayed as well as the total number of goroutines in the group. 487 488 goroutines -group label key 489 490 Groups goroutines by the value of the label with the specified key. 491 492 EXEC 493 494 goroutines -exec <command> 495 496 Runs the command on every goroutine. 497 498 499 Aliases: grs 500 501 ## help 502 Prints the help message. 503 504 help [command] 505 506 Type "help" followed by the name of a command for more information about it. 507 508 Aliases: h 509 510 ## libraries 511 List loaded dynamic libraries 512 513 514 ## list 515 Show source code. 516 517 [goroutine <n>] [frame <m>] list [<locspec>] 518 519 Show source around current point or provided locspec. 520 521 For example: 522 523 frame 1 list 69 524 list testvariables.go:10000 525 list main.main:30 526 list 40 527 528 Aliases: ls l 529 530 ## locals 531 Print local variables. 532 533 [goroutine <n>] [frame <m>] locals [-v] [<regex>] 534 535 The name of variables that are shadowed in the current scope will be shown in parenthesis. 536 537 If regex is specified only local variables with a name matching it will be returned. If -v is specified more information about each local variable will be shown. 538 539 540 ## next 541 Step over to next source line. 542 543 next [count] 544 545 Optional [count] argument allows you to skip multiple lines. 546 547 548 Aliases: n 549 550 ## next-instruction 551 Single step a single cpu instruction, skipping function calls. 552 553 Aliases: ni nexti 554 555 ## on 556 Executes a command when a breakpoint is hit. 557 558 on <breakpoint name or id> <command> 559 on <breakpoint name or id> -edit 560 561 562 Supported commands: print, stack, goroutine, trace and cond. 563 To convert a breakpoint into a tracepoint use: 564 565 on <breakpoint name or id> trace 566 567 The command 'on <bp> cond <cond-arguments>' is equivalent to 'cond <bp> <cond-arguments>'. 568 569 The command 'on x -edit' can be used to edit the list of commands executed when the breakpoint is hit. 570 571 572 ## packages 573 Print list of packages. 574 575 packages [<regex>] 576 577 If regex is specified only the packages matching it will be returned. 578 579 580 ## print 581 Evaluate an expression. 582 583 [goroutine <n>] [frame <m>] print [%format] <expression> 584 585 See [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions. 586 587 The optional format argument is a format specifier, like the ones used by the fmt package. For example "print %x v" will print v as an hexadecimal number. 588 589 Aliases: p 590 591 ## rebuild 592 Rebuild the target executable and restarts it. It does not work if the executable was not built by delve. 593 594 595 ## regs 596 Print contents of CPU registers. 597 598 regs [-a] 599 600 Argument -a shows more registers. Individual registers can also be displayed by 'print' and 'display'. See [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md). 601 602 603 ## restart 604 Restart process. 605 606 For recorded targets the command takes the following forms: 607 608 restart resets to the start of the recording 609 restart [checkpoint] resets the recording to the given checkpoint 610 restart -r [newargv...] [redirects...] re-records the target process 611 612 For live targets the command takes the following forms: 613 614 restart [newargv...] [redirects...] restarts the process 615 616 If newargv is omitted the process is restarted (or re-recorded) with the same argument vector. 617 If -noargs is specified instead, the argument vector is cleared. 618 619 A list of file redirections can be specified after the new argument list to override the redirections defined using the '--redirect' command line option. A syntax similar to Unix shells is used: 620 621 <input.txt redirects the standard input of the target process from input.txt 622 >output.txt redirects the standard output of the target process to output.txt 623 2>error.txt redirects the standard error of the target process to error.txt 624 625 626 Aliases: r 627 628 ## rev 629 Reverses the execution of the target program for the command specified. 630 Currently, rev next, step, step-instruction and stepout commands are supported. 631 632 633 ## rewind 634 Run backwards until breakpoint or start of recorded history. 635 636 Aliases: rw 637 638 ## set 639 Changes the value of a variable. 640 641 [goroutine <n>] [frame <m>] set <variable> = <value> 642 643 See [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions. Only numerical variables and pointers can be changed. 644 645 646 ## source 647 Executes a file containing a list of delve commands 648 649 source <path> 650 651 If path ends with the .star extension it will be interpreted as a starlark script. See [Documentation/cli/starlark.md](//github.com/go-delve/delve/tree/master/Documentation/cli/starlark.md) for the syntax. 652 653 If path is a single '-' character an interactive starlark interpreter will start instead. Type 'exit' to exit. 654 655 656 ## sources 657 Print list of source files. 658 659 sources [<regex>] 660 661 If regex is specified only the source files matching it will be returned. 662 663 664 ## stack 665 Print stack trace. 666 667 [goroutine <n>] [frame <m>] stack [<depth>] [-full] [-offsets] [-defer] [-a <n>] [-adepth <depth>] [-mode <mode>] 668 669 -full every stackframe is decorated with the value of its local variables and arguments. 670 -offsets prints frame offset of each frame. 671 -defer prints deferred function call stack for each frame. 672 -a <n> prints stacktrace of n ancestors of the selected goroutine (target process must have tracebackancestors enabled) 673 -adepth <depth> configures depth of ancestor stacktrace 674 -mode <mode> specifies the stacktrace mode, possible values are: 675 normal - attempts to automatically switch between cgo frames and go frames 676 simple - disables automatic switch between cgo and go 677 fromg - starts from the registers stored in the runtime.g struct 678 679 680 Aliases: bt 681 682 ## step 683 Single step through program. 684 685 Aliases: s 686 687 ## step-instruction 688 Single step a single cpu instruction. 689 690 Aliases: si stepi 691 692 ## stepout 693 Step out of the current function. 694 695 Aliases: so 696 697 ## target 698 Manages child process debugging. 699 700 target follow-exec [-on [regex]] [-off] 701 702 Enables or disables follow exec mode. When follow exec mode Delve will automatically attach to new child processes executed by the target process. An optional regular expression can be passed to 'target follow-exec', only child processes with a command line matching the regular expression will be followed. 703 704 target list 705 706 List currently attached processes. 707 708 target switch [pid] 709 710 Switches to the specified process. 711 712 713 ## thread 714 Switch to the specified thread. 715 716 thread <id> 717 718 Aliases: tr 719 720 ## threads 721 Print out info for every traced thread. 722 723 724 ## toggle 725 Toggles on or off a breakpoint. 726 727 toggle <breakpoint name or id> 728 729 730 ## trace 731 Set tracepoint. 732 733 trace [name] [locspec] 734 735 A tracepoint is a breakpoint that does not stop the execution of the program, instead when the tracepoint is hit a notification is displayed. See [Documentation/cli/locspec.md](//github.com/go-delve/delve/tree/master/Documentation/cli/locspec.md) for the syntax of locspec. If locspec is omitted a tracepoint will be set on the current line. 736 737 See also: "help on", "help cond" and "help clear" 738 739 Aliases: t 740 741 ## transcript 742 Appends command output to a file. 743 744 transcript [-t] [-x] <output file> 745 transcript -off 746 747 Output of Delve's command is appended to the specified output file. If '-t' is specified and the output file exists it is truncated. If '-x' is specified output to stdout is suppressed instead. 748 749 Using the -off option disables the transcript. 750 751 752 ## types 753 Print list of types 754 755 types [<regex>] 756 757 If regex is specified only the types matching it will be returned. 758 759 760 ## up 761 Move the current frame up. 762 763 up [<m>] 764 up [<m>] <command> 765 766 Move the current frame up by <m>. The second form runs the command on the given frame. 767 768 769 ## vars 770 Print package variables. 771 772 vars [-v] [<regex>] 773 774 If regex is specified only package variables with a name matching it will be returned. If -v is specified more information about each package variable will be shown. 775 776 777 ## watch 778 Set watchpoint. 779 780 watch [-r|-w|-rw] <expr> 781 782 -r stops when the memory location is read 783 -w stops when the memory location is written 784 -rw stops when the memory location is read or written 785 786 The memory location is specified with the same expression language used by 'print', for example: 787 788 watch v 789 watch -w *(*int)(0x1400007c018) 790 791 will watch the address of variable 'v' and writes to an int at addr '0x1400007c018'. 792 793 Note that writes that do not change the value of the watched memory address might not be reported. 794 795 See also: "help print". 796 797 798 ## whatis 799 Prints type of an expression. 800 801 whatis <expression> 802 803