Commit Graph

152 Commits

Author SHA1 Message Date
Suzy Mueller
3833c3d029
service/dap: move presentationHint to frame from source (#2810) 2021-12-01 10:57:03 +01:00
polinasok
88dca53e5c
service/dap: fix TestNextParked (#2784)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-11-24 13:46:14 -08:00
Suzy Mueller
935161f8bf
service/dap: expose sources command in evaluate request (#2797)
* service/dap: expose sources command in evaluate request
2021-11-24 13:38:37 -08:00
Suzy Mueller
19ce116bb2
service/dap: allow expression evaluation in log messages (#2747)
From the DAP spec:

If this attribute exists and is non-empty, the backend must not 'break' (stop) but log the message instead.
Expressions within {} are interpolated.
This change parses the log messages and stores the parsed values as a format string and list of expressions to evaluate and get the string value of.

Updates golang/vscode-go#123
2021-10-29 19:41:30 -07:00
Suzy Mueller
f8deab8522
service/dap: fix goroutine id selection for hardcoded breakpoints (#2748)
* service/dap: fix goroutine id selection for hardcoded breakpoints

Determining the stopped goroutine id on a breakpoint required
checking for breakpoints since some may be tracepoints. However,
there may be goroutines stopped on hardcoded breakpoints with
no breakpoint. We fix this by checking for runtime.breakpoint or
StopReason=proc.StopHardcodedBreakpoint.
2021-10-29 19:40:16 -07:00
Suzy Mueller
922c4cebd4
service/dap: add config expressions to evaluate requests (#2750)
We want to provide more flexibility for users to make changes to their configurations while the debug session is running. This could be accomplished by creating a custom request, but that were require a new UI as well, and every client of dlv dap to provide its own UI for this. By using the evaluate context, users can use the already existing debug console to change their configurations.

This change includes a refactor of the terminal code in order to share the code with the dap package.

This change provides a very similar to UI as the terminal package, but there are different configuration options that are DAP specific. We plan to use this same mechanism to expose a few other commands including "sources" to help users debug an ineffective substitutePath configuration.
2021-10-29 19:35:13 -07:00
polinasok
b48ceec161
service/dap: improve shutdown logic and test coverage (#2749)
This high-level goal is to push more shutdown logic into Session and not rely Server.Stop() because dap's version of Stop() is different from rpccommon. That means triggering the same shutdown steps in multiple places, so additional safeguards are added to make some of the duplicate steps no-ops to avoid errors, extra logging, etc.

This includes the following changes:

close client conn when request loop in serveDAPCodec exits (to match rpccommon)
exit request loop after processing a disconnect request (instead of relying on next read to fail because conn got closed by triggered Stop(), which is skipped in case of accept-multiclient and is not closed in Stop() in rpccommon)
reset debugger to nil to avoid shutting it down more than once and causing duplicate logging (in case stopDebugSession is called from onDisconnectRequest and Server.Stop or Session.Close as things shut down)
reset binaryToRemove to "" upon removal to avoid duplicate error (in case Close() is called more than once outside of Stop(), which technically is not the case right now)
expand testing for all possible server shutdown triggers
testing for Session-only shutdown as it will be integrated into rpccommon without dap.Server wrapper
updates golang/vscode-go#1830
updates #2328

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-26 10:11:55 -07:00
polinasok
b31565d8aa
service/dap: support JSON-RPC and DAP on the same port from "dlv debug/exec/test/attach" (#2755)
* Support JSON-RPC and DAP on the same port

* Fix test

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-25 12:39:28 -07:00
Alessandro Arzilli
8ebd2d83ae
Misc fixes for test problems (#2751)
* service/dap: remove deadlock in TestLaunchDebugRequest

Fixes #2746

* terminal: fix TestScopePrefix flakiness

When there are more than 10 frames api.PrintStack will prefix the
output with spaces to right justify the frame number, which confuses
TestScopePrefix.

* _scripts: pass -buildvcs for Go 1.18 and later on TeamCity

Go 1.18 will try to stamp builds with the VCS version, this doesn't
work on TeamCity because the checkout isn't a valid repository (but
looks like it).
Pass -buildvcs=false to disable this feature.

* proc: switch to goroutine stack if first frame's func can not be found

If the first frame on the system stack can not be resolved to a
function switch directly to the goroutine stack.
2021-10-18 13:17:47 -07:00
Suzy Mueller
b99d5f5971
service/dap: add option to hide system goroutines (#2743) 2021-10-18 13:13:12 -07:00
Suzy Mueller
99f03597c3
service/dap: add registers configuration for variables response (#2742) 2021-10-15 13:57:50 +02:00
polinasok
c8f6c3a685
service/dap: support remote-attaching to running debugger (#2737)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-14 10:58:53 -07:00
Suzy Mueller
ce5238944d
service/dap: support disassemble request (#2728)
This adds support for disassembling a region of code using the instructionPointerReference value returned in the stack trace request.
2021-10-14 10:44:36 -07:00
polinasok
64f2200202
service/dap: fix data race for noDebugProcess.ProcessState (#2735)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-13 18:38:22 -07:00
Suzy Mueller
6c4029c765
service/dap: auto resume execution when setting breakpoints (#2726)
A set breakpoints request could come in while the program is running. For a seamless user experience, the server should set the breakpoint and then continue program execution.

Updates golang/vscode-go#1676
2021-10-13 08:52:06 -07:00
Suzy Mueller
d1c888f22a
service/dap: set instruction breakpoints (#2716)
Support setting instruction breakpoints, this is newly supported in VS Code for the disassembly view.
2021-10-13 08:34:09 -07:00
polinasok
d613f8ec45
service/dap: use constants for testing error codes (#2741)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-10 15:57:06 +02:00
polinasok
3515be1db1
service/dap: support accept-multiclient shutdown in remote attach mode (#2731)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-10 15:52:52 +02:00
Suzy Mueller
69634d5d60
service/dap: allow "instruction" stepping granularity (#2713) 2021-10-08 08:58:19 +02:00
polinasok
0baf3b7cf1
service/dap: fix nil dereference when byte array cannot be converted to string (#2733)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-08 08:57:51 +02:00
polinasok
b3b177dc40
service/dap: rename delveCwd to dlvCwd and clarify comments (#2734)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-07 11:28:15 +02:00
polinasok
b2a2b32336
service/dap: Dap => DAP (#2739)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-07 11:27:04 +02:00
Suzy Mueller
b48dd09251
service/dap: log goroutine id and include source info (#2730) 2021-10-05 18:29:46 -07:00
Suzy Mueller
70df230e72
service/dap: merge arguments and local scopes (#2717) 2021-10-05 10:35:14 -07:00
Hyang-Ah Hana Kim
fa10cec9fa
dap: support delveCwd and use a temporary file as default debug binary (#2660) 2021-10-05 13:40:17 +02:00
polinasok
dc2f615c9a
service/dap: refactor the server into two layers (#2729)
* service/dap: refactor the server into two layers

* Add delay before setting debugger in remote tests

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-10-04 09:13:17 -07:00
aarzilli
cf58ba4380 tests: miscellaneus test fixes for Go 1.18 2021-10-02 15:44:30 +02:00
Suzy Mueller
4b30ba4228
service/dap: add basic log points (#2634)
Log points are special kinds of breakpoints that do not 'break' but instead log a message and then continue. This change implements basic log points that simply log the provided message, without any interpolation.

In order to resume execution after hitting a breakpoint, I added a new lock resumeMu and tracked the running state within the DAP server. resumeMu must be held in order to issue a debugger request that would start execution. This means it can be used to make sure that another goroutine does not resume execution while you are holding the lock.

Most of the synchronization logic is taken from PR #2530

Updates golang/vscode-go#123
2021-09-24 15:22:32 -07:00
Suzy Mueller
e00670b901
service/debugger: return correct exit status on manual halt (#2674)
* service/dap: add test for nonzero exit status
2021-09-24 15:18:28 -07:00
polinasok
2b306e32a6
service/dap: initial remote attach (handler support only) (#2709) 2021-09-24 13:43:46 +02:00
Suzy Mueller
c7e2a9b6fb
service/dap: remove unused test helper arg (#2714) 2021-09-22 21:29:05 -07:00
polinasok
a3897eafa7
service/dap: client must treat non-build launch/attach errors as visible (#2671)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-09-22 21:12:48 -07:00
polinasok
cf10647360
service/dap: fix test setup for forcing server stop, add extra test (#2702)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-09-20 08:53:01 -07:00
Suzy Mueller
ab38d71147
service/dap: show decimal and hex values for uint (#2694) 2021-09-16 12:19:01 +02:00
Suzy Mueller
0979847100
service/dap: do not send a halt request if the debuggee is not running (#2686)
updates go-delve/delve#2685
2021-09-09 08:49:11 -07:00
polinasok
47d07e095c
service/dap: add test coverage for Stop() (#2678)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-09-01 09:59:51 -07:00
Suzy Mueller
88b163d038
service/dap: include selected goroutine in threads request (#2683)
When we set a limit on the number of threads that would be
returned, it was possible that the selected thread was not
included in the list of threads. This could cause issues
because the stopped reason is associated with the selected
goroutine, so users could be missing out on important info.

This change makes sure that the selected goroutine is included
by adding it to the end of the list.
2021-09-01 09:58:42 -07:00
Hyang-Ah Hana Kim
1433c07957
dap: define LaunchConfig/AttachConfig types (#2571)
Formally define these types and document their meaning.
We will auto-generate the dlv-dap documentation from these Go type doc.

mapToStruct is a helper that sets the given struct's fields with the
info in map[string]interface{} (launch/attach's Arguments). We achieve
this by reencoding map[string]interface{} to json and decoding back to
the target struct. If go-dap left the implementation-specific arguments
as json.RawMessage and let the implementation decode as needed, this
reencoding could've been avoided.

encoding/json itself does not have mean to enforce required fields.
There was a test case that checks substitutePath elements must set
both from/to fields. Path.UnmarshalJSON implements the check.
I am not yet sure about the need for distinction between missing
'from/to' and empty strings yet. (empty value is useful when dealing with
a binary built with trimpath, right?)

A minor behavior change - previously, if noDebug is not a boolean type,
we ignored the attribute silently. Since we use json decoding, any
mismatched types will cause an error and this non-boolean type noDebug
attribute will result in launch failure.
2021-08-26 14:42:58 +02:00
polinasok
7cdf48605b
service/dap: clarify handling of relative program path (#2653)
* service/dap: add test verifying handling of relative program path

* Add exec test, log build dir and document in --help

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-08-23 11:27:49 -07:00
polinasok
a4d416d5f1
service/dap: add test that verifies output path is relative to wd (#2656)
* service/dap: add test that verifies output path is relative to wd

* Use cleanExeName to get the right output name on Win

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-08-17 11:40:31 -07:00
polinasok
694b45c893
service/dap: fix noDebug mode to handle requests while running (#2658)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-08-16 08:51:23 -07:00
Alessandro Arzilli
e175d68e97
service/dap: fix race condition in TestContinueOnEntry (#2641)
The Threads request sent immediately after the ConfigurationDone
request can be processed in two possible states:

- while the program is being executed, when it will return Id=1,
  Name=Dummy
- after the program terminates, when it will return Id=-1, Name=Current

additionally the response could be received in any order with the
Terminate event.

Remove the problematic Threads request from the test.
2021-08-05 22:19:27 -07:00
polinasok
985eca462c
service/dap: log execution-halted message when setting breakpoints (#2631)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-08-05 10:16:15 -07:00
Alessandro Arzilli
2971fd4c68
service/dap: fix TestNextParked/TestStepInParked (#2643)
The loop searching for a suitable goroutine is not guaranteed to ever
find it, and failing to find one is not an error.

Changes testStepParkedHelper to match the behavior of TestNextParked in
proc_test.go.
Deletes TestStepInParked because it does not test anything meaningful
beyond what's already tested by TestNextParked.
2021-08-04 14:12:58 -07:00
Suzy Mueller
89ed5a0b19
service/dap: page stack frames (#2597)
Returning monotonically increasing totalFrames values for subsequent requests can be used to enforce paging in the client. If we are not at the end of the stackFrames that are returned, we return a higher total frames to suggest to the client that they should request more frames.
2021-07-29 10:34:01 -07:00
Suzy Mueller
b87a1fc55d
service/dap: make next while nexting error more clear (#2622)
To make it more clear that the user can resume the program when they encounter a next while nexting error, make the exception information have instructions for resuming the program. This implements the suggestions outlined by @polinasok in #2443.
2021-07-29 10:27:49 -07:00
Derek Parker
f6681c6090
pkg/proc: Prefer throw instead of fatalthrow (#2616)
* pkg/proc: Prefer throw instead of fatalthrow

Currently there is a breakpoint set at runtime.fatalthrow to catch any
situation where the runtime crashes (e.g. deadlock).
When we do this, we go up a frame in order to parse the crash reason.
The problem is that there is no guarentee the "s" variable we attempt to
parse will still be considered "live".
Since runtime.fatalthrow is never called directly, set a breakpoint on
runtime.throw instead and prevent having
to search up a stack frame in order to
get the throw reason.

Fixes #2602

* service/dap: Fix TestFatalThrowBreakpoint

* Reenable TestFatalThrow DAP test

* service/dap: Don't skip test on < 1.17

* service/dap: Update test constraint for 1.16

* pkg/proc: Reinstate runtime.fatalthrow as switchstack exception
2021-07-27 23:58:02 -07:00
polinasok
aaed14ffcb
service/dap: fix backend parsing in replay mode (#2618)
Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-07-23 14:04:53 -07:00
Suzy Mueller
f1edc45f75
service/dap: disable TestFatalThrowBreakpoint for Go 1.17 (#2614)
* service/dap: disable TestFatalThrowBreakpoint for Go 1.17
2021-07-23 10:12:57 -07:00
polinasok
b7d8edcdaf
service/dap: handle unexpected debugger termination (EOF) error (#2574)
Using issue419.go, I observed that the continue command fails with an error when debugger receives and forwards an interrupt. In spite of the stopped event, vscode still shows the state as RUNNING because the threads request is unable to retrieve any threads, but at least one dummy thread is always expected.

Co-authored-by: Polina Sokolova <polinasok@users.noreply.github.com>
2021-07-22 08:52:04 -07:00