# #go #visual-studio-code
Вопрос:
Я думаю, что я очень близок к удаленной отладке этого кода. И программа, и плагин компилируются с флагами отладки
{
"name": "Remote Debug",
"type": "go",
"request": "attach",
"mode": "remote",
"port": 2000,
"stopOnEntry": true,
"showLog": true,
"apiVersion": 1,
"trace": "verbose",
"logOutput": "dap"
}
2021-10-29, 02:03:04.384 UTC
[02:03:04.384 UTC] From client: initialize({"clientID":"vscode","clientName":"Visual Studio Code","adapterID":"go","pathFormat":"path","linesStartAt1":true,"columnsStartAt1":true,"supportsVariableType":true,"supportsVariablePaging":true,"supportsRunInTerminalRequest":true,"locale":"en-us","supportsProgressReporting":true,"supportsInvalidatedEvent":true,"supportsMemoryReferences":true})
[02:03:04.384 UTC] InitializeRequest
[02:03:04.384 UTC] To client: {"seq":0,"type":"response","request_seq":1,"command":"initialize","success":true,"body":{"supportsConditionalBreakpoints":true,"supportsConfigurationDoneRequest":true,"supportsSetVariable":true}}
[02:03:04.384 UTC] InitializeResponse
[02:03:04.384 UTC] From client: attach({"name":"Remote Debug","type":"go","request":"attach","mode":"remote","port":2000,"stopOnEntry":true,"showLog":true,"apiVersion":1,"trace":"verbose","logOutput":"dap","__configurationTarget":5,"packagePathToGoModPathMap":{"/home/k/dev/game-project/src":"/home/k/dev/game-project","/home/k/dev/game-project":"/home/k/dev/game-project","/home/k/dev/game-project/nakama/server":"/home/k/dev/game-project/nakama","/home/k/dev/game-project/nakama/internal/cronexpr":"/home/k/dev/game-project/nakama","/home/k/dev/game-project/nakama/internal/gopher-lua":"/home/k/dev/game-project/nakama","/home/k/dev/game-project/nakama/internal/skiplist":"/home/k/dev/game-project/nakama","/home/k/dev/game-project/nakama/vendor/github.com/m3db/prometheus_procfs":"/home/k/dev/game-project/nakama"},"debugAdapter":"legacy","cwd":"/home/k/dev/game-project","dlvToolPath":"/home/k/go/bin/dlv","env":{"ELECTRON_RUN_AS_NODE":"1","KDE_FULL_SESSION":"true","SNAP_INSTANCE_KEY":"","USER":"k","SNAP_COMMON":"/var/snap/code/common","QT_SCREEN_SCALE_FACTORS":"DVI-D-0=1;HDMI-0=1;DP-0=1;DP-1=1;DP-2=1;DP-3=1;DP-4=1;DP-5=1;VGA-1-1=1;HDMI-1-1=1;HDMI-1-2=1;","XDG_SEAT":"seat0","SSH_AGENT_PID":"1889","XDG_SESSION_TYPE":"x11","XCURSOR_SIZE":"0","SHLVL":"0","HOME":"/home/k","SNAP_LIBRARY_PATH":"/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void","DESKTOP_SESSION":"plasma","SNAP_USER_DATA":"/home/k/snap/code/78","XDG_SEAT_PATH":"/org/freedesktop/DisplayManager/Seat0","KDE_SESSION_VERSION":"5","DBUS_SESSION_BUS_ADDRESS":"unix:path=/run/user/1000/bus","SNAP_REVISION":"78","LIBVIRT_DEFAULT_URI":"qemu:///system","MANDATORY_PATH":"/usr/share/gconf/plasma.mandatory.path","LOGNAME":"k","SNAP_CONTEXT":"9VXdAxRD9JXQWIBOTnUs4V6r7teZ3pes13s70tOuvuA6994FOcKj","QT_AUTO_SCREEN_SCALE_FACTOR":"0","XDG_SESSION_CLASS":"user","DEFAULTS_PATH":"/usr/share/gconf/plasma.default.path","SNAP_VERSION":"6cba118a","XDG_SESSION_ID":"2","SNAP_INSTANCE_NAME":"code","PATH":"/usr/local/go/bin:/home/k/.cargo/bin:/home/k/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin","SESSION_MANAGER":"local/crashoverride:@/tmp/.ICE-unix/1986,unix/crashoverride:/tmp/.ICE-unix/1986","XDG_SESSION_PATH":"/org/freedesktop/DisplayManager/Session0","BAMF_DESKTOP_FILE_HINT":"/var/lib/snapd/desktop/applications/code_code.desktop","SNAP_DATA":"/var/snap/code/78","XDG_RUNTIME_DIR":"/run/user/1000","XCURSOR_THEME":"Vimix-cursors","DISPLAY":":0","LANG":"en_US.UTF-8","XDG_CURRENT_DESKTOP":"KDE","XDG_SESSION_DESKTOP":"KDE","XAUTHORITY":"/home/k/.Xauthority","SNAP_USER_COMMON":"/home/k/snap/code/common","SSH_AUTH_SOCK":"/tmp/ssh-boR9MJfNHuJg/agent.1834","GSETTINGS_SCHEMA_DIR":"/snap/code/78/usr/share/glib-2.0/schemas","SNAP_ARCH":"amd64","SNAP_COOKIE":"9VXdAxRD9JXQWIBOTnUs4V6r7teZ3pes13s70tOuvuA6994FOcKj","SHELL":"/bin/bash","DISABLE_WAYLAND":"1","GDK_PIXBUF_MODULEDIR":"/snap/code/78/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders","QT_ACCESSIBILITY":"1","SNAP_REEXEC":"","SNAP_NAME":"code","GDK_PIXBUF_MODULE_FILE":"/home/k/snap/code/common/.cache/gdk-pixbuf-loaders.cache","GPG_AGENT_INFO":"/run/user/1000/gnupg/S.gpg-agent:0:1","XDG_VTNR":"1","PWD":"/home/k","XDG_CONFIG_DIRS":"/etc/xdg/xdg-plasma:/etc/xdg:/usr/share/kubuntu-default-settings/kf5-settings","SNAP_REAL_HOME":"/home/k","XDG_DATA_DIRS":"/usr/share/plasma:/usr/local/share:/usr/share:/var/lib/snapd/desktop","SNAP":"/snap/code/78","KDE_SESSION_UID":"1000","VSCODE_CWD":"/home/k","APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL":"true","VSCODE_CLI":"1","ELECTRON_NO_ATTACH_CONSOLE":"1","CHROME_DESKTOP":"code-url-handler.desktop","ORIGINAL_XDG_CURRENT_DESKTOP":"KDE","GDK_BACKEND":"x11","VSCODE_NLS_CONFIG":"{"locale":"en-us","availableLanguages":{},"_languagePackSupport":true}","VSCODE_CODE_CACHE_PATH":"/home/k/.config/Code/CachedData/6cba118ac49a1b88332f312a8f67186f7f3c1643","VSCODE_IPC_HOOK":"/run/user/1000/vscode-0e66b754-1.61.2-main.sock","VSCODE_PID":"1184316","_":"/snap/code/78/usr/share/code/code","VSCODE_AMD_ENTRYPOINT":"vs/workbench/services/extensions/node/extensionHostProcess","VSCODE_PIPE_LOGGING":"true","VSCODE_VERBOSE_LOGGING":"true","VSCODE_LOG_NATIVE":"false","VSCODE_IPC_HOOK_EXTHOST":"/run/user/1000/vscode-ipc-0cca5abe-6a32-4f8b-b813-983d57bd2f4e.sock","VSCODE_HANDLES_UNCAUGHT_ERRORS":"true","VSCODE_LOG_STACK":"false","BREAKPAD_DUMP_LOCATION":"/home/k/.config/Code/exthost Crash Reports","VSCODE_CRASH_REPORTER_START_OPTIONS":"{"companyName":"Microsoft","productName":"VSCode","submitURL":"","uploadToServer":false}","WALLABY_PRODUCTION":"true","GOMODCACHE":"/home/k/go/pkg/mod","GOPATH":"/home/k/go","GOPROXY":"https://proxy.golang.org,direct"},"__sessionId":"3f287784-d0d1-4657-b305-ce19988aaded"})
[02:03:04.384 UTC] AttachRequest
[02:03:04.385 UTC] Start remote debugging: connecting 127.0.0.1:2000
[02:03:04.619 UTC] To client: {"seq":0,"type":"event","event":"initialized"}
[02:03:04.619 UTC] InitializeEvent
[02:03:04.619 UTC] To client: {"seq":0,"type":"response","request_seq":2,"command":"attach","success":true}
[02:03:04.626 UTC] From client: setBreakpoints({"source":{"name":"main.go","path":"/home/k/dev/game-project/src/main.go"},"lines":[23,24],"breakpoints":[{"line":23},{"line":24}],"sourceModified":false})
[02:03:04.626 UTC] SetBreakPointsRequest
[02:03:04.628 UTC] Debuggee is not running. Setting breakpoints without halting.
[02:03:04.658 UTC] All cleared
[02:03:04.658 UTC] Creating on: /home/k/dev/game-project/src/main.go:23
[02:03:04.658 UTC] Creating on: /home/k/dev/game-project/src/main.go:24
[02:03:04.659 UTC] Error on CreateBreakpoint: could not find statement at github.com/heroiclabs/nakama/v3/main.go:23, please use a line with a statement
[02:03:04.659 UTC] Error on CreateBreakpoint: could not find statement at github.com/heroiclabs/nakama/v3/main.go:24, please use a line with a statement
[02:03:04.659 UTC] All set:[null,null]
[02:03:04.659 UTC] To client: {"seq":0,"type":"response","request_seq":3,"command":"setBreakpoints","success":true,"body":{"breakpoints":[{"verified":false,"line":23},{"verified":false,"line":24}]}}
[02:03:04.659 UTC] SetBreakPointsResponse
[02:03:04.662 UTC] From client: configurationDone(undefined)
[02:03:04.662 UTC] ConfigurationDoneRequest
[02:03:04.663 UTC] To client: {"seq":0,"type":"event","event":"stopped","body":{"reason":"entry","threadId":1}}
[02:03:04.663 UTC] StoppedEvent("entry")
[02:03:04.663 UTC] To client: {"seq":0,"type":"response","request_seq":4,"command":"configurationDone","success":true}
[02:03:04.663 UTC] ConfigurationDoneResponse {"seq":35,"type":"response","request_seq":4,"command":"configurationDone","success":true}
[02:03:04.666 UTC] From client: threads(undefined)
[02:03:04.667 UTC] ThreadsRequest
[02:03:04.667 UTC] From client: threads(undefined)
[02:03:04.667 UTC] goroutines []
[02:03:04.667 UTC] To client: {"seq":0,"type":"response","request_seq":5,"command":"threads","success":true,"body":{"threads":[{"id":1,"name":"Dummy"}]}}
[02:03:04.667 UTC] ThreadsResponse [{"id":1,"name":"Dummy"}]
[02:03:04.668 UTC] ThreadsRequest
[02:03:04.668 UTC] goroutines []
[02:03:04.668 UTC] To client: {"seq":0,"type":"response","request_seq":6,"command":"threads","success":true,"body":{"threads":[{"id":1,"name":"Dummy"}]}}
[02:03:04.668 UTC] ThreadsResponse [{"id":1,"name":"Dummy"}]
[02:03:04.672 UTC] From client: stackTrace({"threadId":1,"startFrame":0,"levels":20})
[02:03:04.672 UTC] StackTraceRequest
[02:03:04.674 UTC] [Error] Failed to produce stacktrace - unknown goroutine 1
[02:03:04.675 UTC] To client: {"seq":0,"type":"response","request_seq":7,"command":"stackTrace","success":false,"message":"Unable to produce stack trace: "{e}"","body":{"error":{"id":2004,"format":"Unable to produce stack trace: "{e}"","variables":{"e":"unknown goroutine 1"}}}}
[02:03:04.676 UTC] locations [{"pc":140177321132176,"file":"?","line":-1,"Locals":null,"Arguments":null,"FrameOffset":16,"FramePointerOffset":0,"Defers":[],"Bottom":true,"Err":""},{"pc":0,"file":"","line":0,"Locals":null,"Arguments":null,"FrameOffset":0,"FramePointerOffset":0,"Defers":[],"Err":"input/output error"}]
[02:03:04.842 UTC] [Error] Last known immediate stacktrace (goroutine id 0):
[02:03:04.842 UTC] [Error] /home/k/dev/game-project/nakama/vendor/golang.org/x:-1
<unknown>
:0
<unknown>
Отладчик успешно подключается и зависает при подключении. Как мне сообщить dlv, что исходный код этого динамически загружаемого плагина находится в моем локальном каталоге? Я пробовал экспериментировать с substituePath, но безуспешно. Если мне нужно это использовать, может ли кто-нибудь помочь мне понять, что делать?
Комментарии:
1. Для сложных случаев используйте GDB с соответствующим сценарием поддержки Go ( golang.org/src/runtime/runtime-gdb.py ) может быть лучшим вариантом. DLV ограничен во многих отношениях.