1. 11 3月, 2020 2 次提交
    • A
      proc,proc/*: add StopReason field to Target (#1877) · 9f97edb0
      Alessandro Arzilli 提交于
      * proc,proc/*: move SelectedGoroutine to proc.Target, remove PostInitializationSetup
      
      moves SelectedGoroutine, SwitchThread and SwitchGoroutine to
      proc.Target, merges PostInitializationSetup with NewTarget.
      
      * proc,proc/*: add StopReason field to Target
      
      Adds a StopReason field to the Target object describing why the target
      process is currently stopped. This will be useful for the DAP server
      (which needs to report this reason in one of its requests) as well as
      making pull request #1785 (reverse step) conformant to the new
      architecture.
      
      * proc: collect NewTarget arguments into a struct
      9f97edb0
    • C
      pkg/proc,service: support linux/386 (#1884) · f3a191cd
      chainhelen 提交于
      Implement debugging function for 386 on linux with reference to AMD64.
      There are a few remaining problems that need to be solved in another time.
      
      1. The stacktrace of cgo are not exactly as expected.
      2. Not implement `core` for now.
      3. Not implement `call` for now. Can't not find `runtime·debugCallV1` or
         similar function in $GOROOT/src/runtime/asm_386.s.
      
      Update #20
      f3a191cd
  2. 10 3月, 2020 1 次提交
    • A
      proc/native/linuc: Better native.Process.stop performance (#1874) · e9b2da17
      Alessandro Arzilli 提交于
      * proc/native/linux: only set breakpoints on threads that receive SIGTRAP
      
      * proc/native/linux: do not call (*Thread).Stopped inside (*Process).stop
      
      (*Thread).Stopped is slow because it needs to open, read and parse a
      file in /proc, we don't actually need to do that, we can just rely on
      the value of Thread.os.running.
      
      Benchmark before:
      
      BenchmarkConditionalBreakpoints-4              1        12476166303 ns/op
      
      Benchmark after:
      
      BenchmarkConditionalBreakpoints-4   	       1	10403533675 ns/op
      
      Conditional breakpoint evaluation: 1.24ms -> 1ms
      
      Updates #1549
      e9b2da17
  3. 06 3月, 2020 1 次提交
  4. 03 3月, 2020 1 次提交
  5. 01 3月, 2020 1 次提交
    • J
      proc/native/linux: try to use process_vm_readv/writev · d0d2d478
      Josh Stone 提交于
      This change adds `ProcessVmRead` and `ProcessVmWrite` wrappers around
      the syscalls `process_vm_readv` and `process_vm_writev`, available since
      Linux 3.2. These follow the same permission model as `ptrace`, but they
      don't actually require being attached, which means they can be called
      directly from any thread in the debugger. They also use `iovec` to write
      entire blocks at once, rather than having to peek/poke each `uintptr`.
      
      These wrappers are used in `Thread.ReadMemory` and `WriteMemory`, still
      falling back to `ptrace` if that fails for any reason.  Notably,
      `process_vm_writev` respects memory protection, so it can't modify
      read-only memory like `ptrace`. This frequently occurs when writing
      breakpoints in read-only `.text`, so to avoid a lot of wasted `EFAULT`
      calls, we only try `process_vm_writev` for larger writes.
      d0d2d478
  6. 26 2月, 2020 1 次提交
  7. 25 2月, 2020 3 次提交
    • A
      proc,service: allow printing registers for arbitrary frames (#1875) · d925f6b7
      Alessandro Arzilli 提交于
      Adds an optional scope prefix to the `regs` command which allows
      printing registers for any stack frame (as long as they were somehow
      saved). Issue #1838 is not yet to be closed since we are still not
      recovering the registers of a segfaulting frame.
      
      Updates #1838
      d925f6b7
    • A
      proc/native: better error message when building on unsupported systems (#1883) · ade20a4d
      Alessandro Arzilli 提交于
      As we rearrange the code and the Go compiler changes the error message
      returned by the compiler on unsupported architectures will change too,
      making it un-googlable. Since the error message tends to be rather
      obscure too this regularly confuses newbies.
      
      This is an effort to make the error message for unsupported GOOS/GOARCH
      combinations the same across all unsupported combinations and to make
      it more user friendly.
      
      Directories containing Go source code are supposed to contain a single
      package. This property happens to be checked by cmd/go itself so it
      will happen even before the syntax is fully checked and therefore has a
      high probability of being the first (and only) error message being
      print.
      
      Here we take advantage of this by adding to the pkg/proc/native
      directory a file with a bad package line that only gets compiled in on
      unsupported GOOS/GOARCH combinations.
      
      At present the error message for compiling Delve on unsupported systems
      will be:
      
      service/debugger/debugger.go:21:2: found packages native (proc.go) and your_operating_system_and_architecture_combination_is_not_supported_by_delve (support_sentinel.go) in $PATH_TO_DELVE/pkg/proc/native
      ade20a4d
    • C
      pkg/proc: Fix ThreadId when ErrNoGoroutine on g0 stack in GetG · d0b21fbb
      chainhelen 提交于
      Avoid always showing `no G executing on thread 0` when ErrNoGoroutine on
      g0 stack in GetG.
      d0b21fbb
  8. 21 2月, 2020 1 次提交
  9. 20 2月, 2020 2 次提交
  10. 18 2月, 2020 2 次提交
    • O
      proc/core: implementing coredump functionality for ARM64 (#1774) · a83d1c14
      ossdev07 提交于
      * proc/native: optimize native.status through buffering (#1865)
      
      Benchmark before:
      
      BenchmarkConditionalBreakpoints-4              1        15649407130 ns/op
      
      Benchmark after:
      
      BenchmarkConditionalBreakpoints-4   	       1	14586710018 ns/op
      
      Conditional breakpoint evaluation 1.56ms -> 1.45ms
      
      Updates #1549
      
      * proc/core: Review Comments Incorporated
      Signed-off-by: Nossdev07 <ossdev@puresoftware.com>
      Co-authored-by: NAlessandro Arzilli <alessandro.arzilli@gmail.com>
      a83d1c14
    • A
      proc: optimize parseG (#1866) · ecea2e18
      Alessandro Arzilli 提交于
      runtime.g is a large and growing struct, we only need a few fields.
      Instead of using loadValue to load the full contents of g, cache its
      memory and then only load the fields we care about.
      
      Benchmark before:
      
      BenchmarkConditionalBreakpoints-4              1        14586710018 ns/op
      
      Benchmark after:
      
      BenchmarkConditionalBreakpoints-4   	       1	12476166303 ns/op
      
      Conditional breakpoint evaluation: 1.45ms -> 1.24ms
      
      Updates #1549
      ecea2e18
  11. 16 2月, 2020 1 次提交
  12. 14 2月, 2020 2 次提交
    • D
      proc/gdbserial: Reload thread registers on demand · a277b15d
      Derek Parker 提交于
      Instead of reloading the registers for every thread every time the
      process executes, reload the registers on demand for individual threads
      and memoize the result.
      a277b15d
    • A
      proc: do not load g0 until it's needed when stacktracing (#1863) · 5b4f4a81
      Alessandro Arzilli 提交于
      The stacktrace code occasionally needs the value of g.m.g0.sched.sp to
      switch stacks. Since this is only needed rarely and calling parseG is
      relatively expensive we should delay doing it until we know it will be
      needed.
      
      Benchmark before:
      
      BenchmarkConditionalBreakpoints-4              1        17326345671 ns/op
      
      Benchmark after:
      
      BenchmarkConditionalBreakpoints-4   	       1	15649407130 ns/op
      
      Reduces conditional breakpoint latency from 1.7ms to 1.56ms.
      
      Updates #1549
      5b4f4a81
  13. 13 2月, 2020 1 次提交
    • A
      proc: only format registers value when it's necessary (#1860) · b9d0ddd8
      Alessandro Arzilli 提交于
      A significant amount of time is spent generating the string
      representation for the proc.Registers object of each thread, since this
      field is rarely used (only when the Registers API is called) it should
      be generated on demand.
      
      Also by changing the internal representation of proc.Register to be
      closer to that of op.DwarfRegister it will help us implement #1838
      (when Delve will need to be able to display the registers of an
      internal frame, which we currently represent using op.DwarfRegister
      objects).
      
      Benchmark before:
      
      BenchmarkConditionalBreakpoints-4   	       1	22292554301 ns/op
      
      Benchmark after:
      
      BenchmarkConditionalBreakpoints-4   	       1	17326345671 ns/op
      
      Reduces conditional breakpoint latency from 2.2ms to 1.7ms.
      
      Updates #1549, #1838
      b9d0ddd8
  14. 11 2月, 2020 2 次提交
    • C
    • A
      *: Go 1.14 support branch (#1727) · 0741d3e5
      Alessandro Arzilli 提交于
      * tests: misc test fixes for go1.14
      
      - math.go is now ambiguous due to changes to the go runtime so specify
        that we mean our own math.go in _fixtures
      - go list -m requires vendor-mode to be disabled so pass '-mod=' to it
        in case user has GOFLAGS=-mod=vendor
      - update version of go/packages, required to work with go 1.14 (and
        executed go mod vendor)
      - Increased goroutine migration in one development version of Go 1.14
        revealed a problem with TestCheckpoints in command_test.go and
        rr_test.go. The tests were always wrong because Restart(checkpoint)
        doesn't change the current thread but we can't assume that when the
        checkpoint was taken the current goroutine was running on the same
        thread.
      
      * goversion: update maximum supported version
      
      * Makefile: disable testing lldb-server backend on linux with Go 1.14
      
      There seems to be some incompatibility with lldb-server version 6.0.0
      on linux and Go 1.14.
      
      * proc/gdbserial: better handling of signals
      
      - if multiple signals are received simultaneously propagate all of them to the
        target threads instead of only one.
      - debugserver will drop an interrupt request if a target thread simultaneously
        receives a signal, handle this situation.
      
      * dwarf/line: normalize backslashes for windows executables
      
      Starting with Go 1.14 the compiler sometimes emits backslashes as well
      as forward slashes in debug_line, normalize everything to / for
      conformity with the behavior of previous versions.
      
      * proc/native: partial support for Windows async preempt mechanism
      
      See https://github.com/golang/go/issues/36494 for a description of why
      full support for 1.14 under windows is problematic.
      
      * proc/native: disable Go 1.14 async preemption on Windows
      
      See https://github.com/golang/go/issues/36494
      0741d3e5
  15. 29 1月, 2020 1 次提交
  16. 28 1月, 2020 2 次提交
  17. 27 1月, 2020 1 次提交
  18. 23 1月, 2020 1 次提交
  19. 22 1月, 2020 4 次提交
  20. 17 1月, 2020 1 次提交
    • A
      proc: cache goroutine objects · 9af1eac3
      aarzilli 提交于
      Adds a cache mapping goroutine IDs to goroutine objects, this allows
      speeding up FindGoroutine and makes commands like 'goroutines -t' not
      be accidentally quadratic in the number of goroutines.
      9af1eac3
  21. 14 1月, 2020 1 次提交
  22. 10 1月, 2020 4 次提交
    • A
      proc: fix inlined stack reading for midstack inlined calls · adb1746c
      aarzilli 提交于
      Due to a bug in the Go compiler midstack inlined calls do not report
      their ranges correctly. We can't check if an address is in the range of
      a DIE by simply looking at that DIE's range, we should also recursively
      check the DIE's children's ranges.
      
      Also fixes the way stacktraces of midstack inlined calls are reported
      (they used to be inverted, with the deepest inlined stack frame
      reported last).
      
      Fixes #1795
      adb1746c
    • A
      proc,service: return build informations for each package · a8606afb
      aarzilli 提交于
      Adds an API call that returns a list of packages contained in the
      program and the files that were used to build them, and also a best
      guess at which filesystem directory contained the package when it was
      built.
      
      This can be used by IDEs to map file paths if the debugging environment
      doesn't match the build environment exactly.
      a8606afb
    • A
      dwarf/line: make LineToPCIn behave like LineToPC for lines without stmt · 0e0d6892
      aarzilli 提交于
      When a line has instructions associated but none of them have is_stmt
      set LineToPC and LineToPCIn should behave in the same way.
      
      Fixes #1817
      0e0d6892
    • C
      pkg/proc: fix one typo. · c5f9a03d
      chainhelen 提交于
      Change `copy form` into `copy from`.
      c5f9a03d
  23. 03 1月, 2020 4 次提交