zoukankan      html  css  js  c++  java
  • dlv 调试

    一、安装

           https://github.com/go-delve/delve

    直接去github上查看各种系统的安装教程,应该基本上都是 go get

    二、命令

     1 Available Commands:
     2   attach      Attach to running process and begin debugging.
     3   connect     Connect to a headless debug server.
     4   core        Examine a core dump.
     5   dap         [EXPERIMENTAL] Starts a TCP server communicating via Debug Adaptor Protocol (DAP).
     6   debug       Compile and begin debugging main package in current directory, or the package specified.
     7   exec        Execute a precompiled binary, and begin a debug session.
     8   help        Help about any command
     9   run         Deprecated command. Use 'debug' instead.
    10   test        Compile test binary and begin debugging program.
    11   trace       Compile and begin tracing program.
    12   version     Prints version.
    13 
    14 Flags:
    15       --accept-multiclient   Allows a headless server to accept multiple client connections.
    16       --api-version int      Selects API version when headless. New clients should use v2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 1)
    17       --backend string       Backend selection (see 'dlv help backend'). (default "default")
    18       --build-flags string   Build flags, to be passed to the compiler.
    19       --check-go-version     Checks that the version of Go in use is compatible with Delve. (default true)
    20       --headless             Run debug server only, in headless mode.
    21       --init string          Init file, executed by the terminal client.
    22   -l, --listen string        Debugging server listen address. (default "127.0.0.1:0")
    23       --log                  Enable debugging server logging.
    24       --log-dest string      Writes logs to the specified file or file descriptor (see 'dlv help log').
    25       --log-output string    Comma separated list of components that should produce debug output (see 'dlv help log')
    26       --only-same-user       Only connections from the same user that started this instance of Delve are allowed to connect. (default true)
    27       --wd string            Working directory for running the program. (default ".")
    28 
    29 Additional help topics:
    30   dlv backend Help about the --backend flag.
    31   dlv log     Help about logging flags.

    dlv 内部调试命令:

     1 Running the program:
     2     call ------------------------ Resumes process, injecting a function call (EXPERIMENTAL!!!)
     3     continue (alias: c) --------- Run until breakpoint or program termination.
     4     next (alias: n) ------------- Step over to next source line.
     5     rebuild --------------------- Rebuild the target executable and restarts it. It does not work if the executable was not built by delve.
     6     restart (alias: r) ---------- Restart process.
     7     step (alias: s) ------------- Single step through program.
     8     step-instruction (alias: si)  Single step a single cpu instruction.
     9     stepout (alias: so) --------- Step out of the current function.
    10 
    11 Manipulating breakpoints:
    12     break (alias: b) ------- Sets a breakpoint.
    13     breakpoints (alias: bp)  Print out info for active breakpoints.
    14     clear ------------------ Deletes breakpoint.
    15     clearall --------------- Deletes multiple breakpoints.
    16     condition (alias: cond)  Set breakpoint condition.
    17     on --------------------- Executes a command when a breakpoint is hit.
    18     trace (alias: t) ------- Set tracepoint.
    19 
    20 Viewing program variables and memory:
    21     args ----------------- Print function arguments.
    22     display -------------- Print value of an expression every time the program stops.
    23     examinemem (alias: x)  Examine memory:
    24     locals --------------- Print local variables.
    25     print (alias: p) ----- Evaluate an expression.
    26     regs ----------------- Print contents of CPU registers.
    27     set ------------------ Changes the value of a variable.
    28     vars ----------------- Print package variables.
    29     whatis --------------- Prints type of an expression.
    30 
    31 Listing and switching between threads and goroutines:
    32     goroutine (alias: gr) -- Shows or changes current goroutine
    33     goroutines (alias: grs)  List program goroutines.
    34     thread (alias: tr) ----- Switch to the specified thread.
    35     threads ---------------- Print out info for every traced thread.
    36 
    37 Viewing the call stack and selecting frames:
    38     deferred --------- Executes command in the context of a deferred call.
    39     down ------------- Move the current frame down.
    40     frame ------------ Set the current frame, or execute command on a different frame.
    41     stack (alias: bt)  Print stack trace.
    42     up --------------- Move the current frame up.
    43 
    44 Other commands:
    45     config --------------------- Changes configuration parameters.
    46     disassemble (alias: disass)  Disassembler.
    47     edit (alias: ed) ----------- Open where you are in $DELVE_EDITOR or $EDITOR
    48     exit (alias: quit | q) ----- Exit the debugger.
    49     funcs ---------------------- Print list of functions.
    50     help (alias: h) ------------ Prints the help message.
    51     libraries ------------------ List loaded dynamic libraries
    52     list (alias: ls | l) ------- Show source code.
    53     source --------------------- Executes a file containing a list of delve commands
    54     sources -------------------- Print list of source files.
    55     types ---------------------- Print list of types

    三、使用

    dlv debug

    • 如果位于工程目录下,可以dlv debug开始调试;
    • 也可以指定目录,dlv debug GoWorks/GoDbg;
    • 如果要传入参数,添加–后指定, 如dlv debug GoWorks/GoDbg – -arg1 value

    dlv exec

    1 lin@MacBook-Pro test % ls
    2 activitycenter    go.mod        go.sum        main.go        test
    3 lin@MacBook-Pro test % dlv exec ./test 
    4 Type 'help' for list of commands.
    5 (dlv) 

    dlv attach

    1 lin@MacBook-Pro / % ps -ef | grep test   
    2   501 32158  7146   0  8:12下午 ttys000    0:00.00 grep test
    3   501 32156 31667   0  8:12下午 ttys001    0:00.24 ./test
    4 lin@MacBook-Pro h/ % dlv attach 32156  
    5 Type 'help' for list of commands.
    6 (dlv) -h

    注意:在退出时,有可选是否要kill该进程。

    dlv core

    注意:dlv不支持生成core,可以通过gdb attach上去后,执行gcore来生成core;然后再dlv core来调试。

  • 相关阅读:
    【原】手写梯度下降《三》之
    【原】特征/SVD分解(图像压缩)/PCA降维简介
    【原】手写梯度下降《二》之
    【原】手写梯度下降《一》之
    Python守护进程和脚本单例运行
    subprocess popen 子进程退出的问题
    subprocess.Popen 详解
    python可以序列化的对象
    concurrent.futures的一些经验
    详解multiprocessing多进程-Pool进程池模块
  • 原文地址:https://www.cnblogs.com/linguoguo/p/13675256.html
Copyright © 2011-2022 走看看