mailgun / mailgun/godebug

support stepping into the standard libarary

Open
#12 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
2.5k
Forks
102
PR merge metrics
No merged PRs in 30d

Description

godebug's current procedure for running instrumented code for a package `x` is:
- make a temp directory
- make a subdirectory `$TMP/src/x` containing instrumented versions of the source files for `x`
- run the `go` command, setting `GOPATH=$TMP:$GOPATH`. The `go` command finds our instrumented packages in `$TMP/src` and finds any other un-instrumented packages in the normal GOPATH.

That process does not work for standard library packages, though, because `$GOROOT` has to be a single directory.

Here's my current plan for working around this:
- Implement the proposal from #8 of having a permanent godebug directory that contains instrumented versions of all the packages we have seen so far. Put standard library packages in the same place, or possibly in their own `/goroot` or `/std` directory.
- From the same proposal, generate a temporary directory for every invocation of godebug and fill it with symlinks to the packages we want to instrument. The only new thing is that for all standard library packages we _don't_ want to instrument, we will need to add a symlink to the real package in `$GOROOT`.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading proposal #8 and the current godebug procedure described here, focusing on how temporary directories, GOPATH, and GOROOT are handled. Implement the planned permanent instrumented-package directory and per-invocation symlinks, including links to uninstrumented standard-library packages; done means instrumented standard-library packages can be used without breaking other standard-library dependencies.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.