Commit Graph

1858 Commits

Author SHA1 Message Date
aarzilli
7f53117ea9 proc: do not panic if we can't satisfy a composite location
When a location expression requests a register check that we have as
many bytes in the register as requested and if we don't report the
error.

Updates #1416
2018-11-19 14:46:35 -08:00
Sergio Lopez
11accd4d71 proc/proc: Extend GoroutinesInfo to allow specifying a range
Instead of unconditionally returning all present goroutines,
GoroutinesInfo now allows specifying a range (start and count). In
addition to the array of goroutines and the error, it now also returns
the next goroutine to be processed, to be used as 'start' argument on
the next call, or 0 if all present goroutines have already been
processed.

This way clients can avoid eating large amounts of RAM while debugging
core dumps and processes with a exceptionally high amount of goroutines.

Fixes #1403
2018-11-19 10:06:38 -08:00
Derek Parker
3cfb00b2cc pkg/proc: Cleanup duplicated panic breakpoint code 2018-11-15 18:16:16 +01:00
Derek Parker
d61cd1c0d7 pkg/proc: Refactor process post initialization
This patch is a slight refactor to share more code used for genericprocess initialization. There will always be OS/backend specificinitialization, but as much as can be shared should be to preventduplicating of any logic (setting internal breakpoints, loading bininfo,etc).
2018-11-15 18:16:16 +01:00
Derek Parker
91953dd49c cmd/dlv: Fix tests for use with modules 2018-11-14 09:00:49 +01:00
aarzilli
89c8da65b6 proc: Improve performance of loadMap on very large sparse maps
Users can create sparse maps in two ways, either by:
a) adding lots of entries to a map and then deleting most of them, or
b) using the make(mapType, N) expression with a very large N

When this happens reading the resulting map will be very slow
because loadMap needs to scan many buckets for each entry it finds.

Technically this is not a bug, the user just created a map that's
very sparse and therefore very slow to read. However it's very
annoying to have the debugger hang for several seconds when trying
to read the local variables just because one of them (which you
might not even be interested into) happens to be a very sparse map.

There is an easy mitigation to this problem: not reading any
additional buckets once we know that we have already read all
entries of the map, or as many entries as we need to fulfill the
MaxArrayValues parameter.

Unfortunately this is mostly useless, a VLSM (Very Large Sparse Map)
with a single entry will still be slow to access, because the single
entry in the map could easily end up in the last bucket.

The obvious solution to this problem is to set a limit to the
number of buckets we read when loading a map. However there is no
good way to set this limit.
If we hardcode it there will be no way to print maps that are beyond
whatever limit we pick.
We could let users (or clients) specify it but the meaning of such
knob would be arcane and they would have no way of picking a good
value (because there is no objectively good value for it).

The solution used in this commit is to set an arbirtray limit on
the number of buckets we read but only when loadMap is invoked
through API calls ListLocalVars and ListFunctionArgs. In this way
`ListLocalVars` and `ListFunctionArgs` (which are often invoked
automatically by GUI clients) remain fast even in presence of a
VLSM, but the contents of the VLSM can still be inspected using
`EvalVariable`.
2018-11-09 08:12:45 -08:00
Derek Parker
51c342c6b7 pkg/prog: Improve support for external debug info
Adds a config file option to allow specifying a list of directories to
search in when looking for seperate external debug info files.

Fixes #1353
2018-11-08 10:16:42 -08:00
Derek Parker
a2346ef69a pkg/proc: Unexport exported members of unexported type 2018-11-08 10:16:42 -08:00
Derek Parker
7a414662c0 pkg/proc: Reorganize struct members 2018-11-08 10:16:42 -08:00
Derek Parker
2f746e1d3c pkg/config: Clean up godoc lint issues 2018-11-08 10:16:42 -08:00
Derek Parker
4927bc6c7a *: Switch to using Go modules 2018-11-07 08:44:06 +01:00
aarzilli
7d0d2cb3e6 pkg/core: make code in core.go OS/arch agnostic
Make code in core.go OS and architecture agnostic in preparation for
adding Windows minidump support.
2018-11-06 11:20:38 -08:00
aarzilli
73d636f7d7 tests: rename _fixtures/vendor to _fixtures/internal
Some tests used a fake vendor directory placed inside _fixtures to
import some support packages.
In go.mod mode vendor directory are only supported on the root of the
project, which breaks some of our tests.
Since vendor directories outside the root of the project are so rare
anyway it's possible that a future version of go will stop supporting
it even in GOPATH mode.
Also it was weird and unnecessary in the first place anyawy.
2018-11-06 08:52:06 -08:00
Derek Parker
810b22a633 pkg/dwarf: Remove exec bit from reader.go
For some reason the Go file pkg/dwarf/reader/reader.go had the exec bit
set on it. This patch removes that.
2018-11-01 06:44:16 +01:00
aarzilli
ea3428550d proc/native,proc/core: deduplicate linux register handling code
The linux version of proc/native and proc/core contained largely
overlapping implementations of the register handling code, deduplicate
it by moving it into proc/linutil.
2018-10-22 12:19:09 -07:00
Derek Parker
3129aa7330 *: Show return values on CLI trace
This patch allows the `trace` CLI subcommand to display return values of
a function. Additionally, it will also display information on where the
function exited, which could also be helpful in determining the path
taken during function execution.

Fixes #388
2018-10-19 20:32:27 +02:00
aarzilli
4db9939845 proc/native: Mask MS_VC_EXCEPTION [windows]
Some libraries (for example steam_api64.dll) will send this exception
code to set the thread name on Microsoft VisualC.
In theory it should be fine to send the exception back to the target,
which is responsible for setting a handler for it, in practice in some
cases (steam_api64.dll) this will crash the program. So we'll mask it
instead.

Fixes #1383
2018-10-19 10:33:40 -07:00
aarzilli
d0f0a872a7 Documentation,Makefile: better error when gencert.sh fails
Fixes #1378
2018-10-18 09:47:29 -07:00
Derek Parker
ff760d87aa cmd: Add --exec and --test flags for trace sub cmd
Adds an --exec flag for the trace subcommand allowing users to specify a
pre-compiled binary to exec and trace.

Also adds a --test flag as a convienance for compiling and tracing a
test binary.

Fixes #1073
2018-10-18 11:46:03 +02:00
Derek Parker
c920630082 cmd: Fix trace bug when no package specified
Fix a bug where the regexp would be used as a package string
incorrectly. This would manifest when trying to execute the trace
subcommand as `dlv trace <regexp>` without specifying a package
identifier. The `<regexp>` would be passed to the Go build command
causing an error.
2018-10-18 11:42:25 +02:00
aarzilli
b5cf584564 proc/gdbserial: backward continue should stop at start of process
ContinueOnce didn't detect the way RR signals that it has reached the
start of the process and would never finish.

Fixes #1376
2018-10-17 09:07:36 -07:00
aarzilli
f72c48c034 proc: Continue should always work after CallFunction
Continue did not resume execution after a call to CallFunction if the
point where the process was stopped, before the call CallFunction, was
a breakpoint.

Fixes #1374
2018-10-17 09:07:36 -07:00
aarzilli
d7ea38b89a Documentation: rename "where" parameter of checkpoint to "note"
The name "where" may confuse users into thinking that this parameter
actually does something where in fact it's just arbitrary text used to
identify the checkpoint.

Fixes #1373
2018-10-17 09:07:36 -07:00
aarzilli
b59032516e proc,service,terminal: eval expressions in the scope of a deferred call
Add ability to evaluate variables on the scope of a deferred call's
argument frame.
2018-10-16 08:40:07 -07:00
aarzilli
d2904322fa proc: add flag to disable escape checking in function calls
Fix escape checking in function calls  and add a flag to disable it.
2018-10-15 09:31:35 -07:00
chainhelen
143cf6aebf pkg/proc: extend conversion about string for array/str
Extend `string()`
1.convert `byte/rune array`(not only `slice`) to string.
2.convert string to string(itself), just like `string(str)` in go language.
2018-10-15 09:27:39 -07:00
aarzilli
74c98bc961 proc: support position independent executables (PIE)
Support for position independent executables (PIE) on the native linux
backend, the gdbserver backend on linux and the core backend.
Also implemented in the windows native backend, but it can't be tested
because go doesn't support PIE on windows yet.
2018-10-11 11:21:27 -07:00
Russ Magee
4e4ed02948 config,terminal: Add source-list-line-color configuration option
This change adds a config flag to specify the foreground color of
line numbers for the source list command.
2018-10-10 11:24:29 -07:00
chainhelen
ea54a6b2af cmd,service: remove temporary def of Server interface in func
Use the defination of Server interface in service package, instead of
temporary in func.
2018-10-09 07:56:48 -07:00
aarzilli
ca0596724f cmd,service: in non-headless mode use an in-memory connection
Replace the socket connection with an in-memory connection (created by net.Pipe) for non-headless uses of delve.
This is faster and more secure.

Fixes #1332
2018-10-08 15:11:13 -07:00
aarzilli
910f90c3c8 proc/native,Makefile: allow compiling on macOS without native backend
On macOS 10.14 Apple changed the command line tools so that system
headers now need to be manually installed.

Instead of adding one extra install step to the install procedure add a
build tag to allow compilation of delve without the native backend on
macOS. By default (i.e. when using `go get`) this is how delve will be
compiled on macOS, the make script is changed to enable compiling the
native backend if the required dependencies have been installed.

Insure that both configuration still build correctly on Travis CI and
change the documentation to describe how to compile the native backend
and that it isn't normally needed.

Fixes #1359
2018-10-02 10:46:09 -07:00
aarzilli
79a0e216ab proc: add iface.(data) syntax to access concrete value of an interface
With this syntax users do not need to type the concrete type of an
interface variable to access its contents. This also sidesteps the
problem where the serialization of a type by go/printer is different
from the one used for debug_info type names.

Updates #1328
2018-09-27 14:09:26 -07:00
chainhelen
1b4c318376 pkg/proc: use method not duplicate code
Use IsInternal and IsUser of Breakpoint, not duplicate code
2018-09-26 08:33:02 -07:00
aarzilli
3a9431388a terminal: print something when continue errors even if we don't have a file
We should print something when we exit from continue/next/step/stepout
even if we don't have a source file for the instruction that we are
stopped on.

This is mostly important on macOS where a SIGSEGV will cause 'continue'
to fail with a 'bad access' error (see #852) and the output can be
confusing.

Fixes #1244
2018-09-25 17:46:11 -07:00
aarzilli
43d43316cd terminal: increase default maximum depth of stack command 2018-09-25 17:20:57 -07:00
Kevin Cantwell
4e9ba9a7b5 Fix scripts/make.go for darwin
Correctly locates the installed executable path for darwin
2018-09-25 11:50:24 -07:00
aarzilli
50419b61da proc: implement conversion of integers to string
Go allows converting a single integer value to string, resulting in a
string containing a single unicode rune with the same code as the value
of the integer.
Allow the same conversion to happen.

Fixes #1322
2018-09-25 09:52:04 -07:00
aarzilli
a2eb983e3c proc: be more lenient with errors in GoroutinesInfo
Instead of failing on the first goroutine we can't read save the error
message and keep going.

Fixes a bug reported on the mailing list:
https://groups.google.com/d/msgid/delve-dev/3b3bfaa3-83d5-4676-b974-1fec40e5bf53%40googlegroups.com?utm_medium=email&utm_source=footer
2018-09-25 08:44:13 -07:00
chainhelen
ed9d231a6f pkg/proc/core: add an new error named ErrChangeRegisterCore
This commit just add an new error when trying to change register
values for core files (output the same infomation).
2018-09-24 10:25:46 -07:00
chainhelen
0c86f2619d documentation/cli: fix typo
format `whatis <expression>`
2018-09-24 10:25:15 -07:00
Dmitry Ishmaev
23475717ff Documentation: Add Sublime plugin (#1352) 2018-09-24 10:24:49 -07:00
chainhelen
ee93b0b403 service/test: fix typo 2018-09-20 11:48:37 +02:00
chainhelen
0af7d6d362 cmd/dlv: support multifile when dlv debug, trace and test
This changes make `dlv` support multifile specifically when dlv `debug`,
`trace` and `test`. Just like `dlv debug a.go b.go`. Corresponding to
`go build a.go b.go`.(a.go and b.go are  belong to `main` package).

Fix #984.
2018-09-20 11:47:57 +02:00
Derek Parker
c3f50742b9 *: Misc refactors, and doc additions
Refactors some code, adds a bunch of docstrings and just generally fixes
a bunch of linter complaints.
2018-09-19 20:59:35 +02:00
aarzilli
4fea15832f Documentation: mention that interfaces can also not be loaded
An interface with a children that has onlyAddr set to true was not
loaded due to the depth limit having been reached.
2018-09-18 13:10:50 -07:00
aarzilli
087431f029 Makefile: replace makefile with a script
We were using our makefile not for the intended purpose of makefiles
but to multiplex a series of small scripts.
We can easily achieve the same result in a more reasonable programming
language and as a bonus we don't need to install a version of make on
windows anymore.
Additionally our test script had become fairly complicated and will
become even more complicated when testing of PIE buildmode is
introduced.
Allows the tests to run on Windows without having to install Mingw
(although we still want it installed so that we can run cgo tests on
Windows).

Fixes building when GOPATH isn't set.

Fixes #759
2018-09-18 12:06:25 -07:00
Seth Bromberger
5e6b7997e1 Update install.md 2018-09-18 10:22:48 -07:00
Seth Bromberger
654a9a5b5e Update install.md
Explicit build instructions to avoid #1342.
2018-09-18 10:22:48 -07:00
chainhelen
e5c43dc937 Fix SVG badges 2018-09-18 10:22:20 -07:00
aarzilli
dcf9d4fc6b terminal: refactor edit/list to share getLocation code
Refactors edit and list so that they use the same code to get the
current location and also both accept a locspec as an argument.
2018-08-31 11:16:42 -07:00