docs: update stacktrace info (#26106)
* update stacktrace info * add `filter` parameter
This commit is contained in:
parent
5b326c3721
commit
0dac08a3d2
|
@ -88,6 +88,81 @@ For more information, see the [go test flags][testflag] documentation.
|
|||
|
||||
### Getting Stack Traces
|
||||
|
||||
A stack trace provides a very detailed look into the current state of the geth node.
|
||||
It helps us to debug issues easier as it contains information about what is currently
|
||||
done by the node. Stack traces can be created by running `debug.stacks()` in the Geth
|
||||
console. If the node was started without the console command or with a script in the
|
||||
background, the following command can be used to dump the stack trace into a file.
|
||||
|
||||
```
|
||||
geth attach <path-to-geth.ipc> --exec "debug.stacks()" > stacktrace.txt
|
||||
```
|
||||
Geth logs the location of the IPC endpoint on startup. It is typically under
|
||||
`/home/user/.ethereum/geth.ipc` or `/tmp/geth.ipc`.
|
||||
|
||||
`debug.stacks()` also takes an optional `filter` argument. Passing a package name or
|
||||
filepath to `filter` restricts the output to stack traces involcing only that package/file.
|
||||
For example:
|
||||
|
||||
```sh
|
||||
debug.stacks("enode")
|
||||
```
|
||||
|
||||
returns data that looks like:
|
||||
|
||||
```terminal
|
||||
INFO [11-04|16:15:54.486] Expanded filter expression filter=enode expanded="`enode` in Value"
|
||||
goroutine 121 [chan receive, 3 minutes]:
|
||||
github.com/ethereum/go-ethereum/p2p/enode.(*FairMix).nextFromAny(...)
|
||||
github.com/ethereum/go-ethereum/p2p/enode/iter.go:241
|
||||
github.com/ethereum/go-ethereum/p2p/enode.(*FairMix).Next(0xc0008c6060)
|
||||
github.com/ethereum/go-ethereum/p2p/enode/iter.go:215 +0x2c5
|
||||
github.com/ethereum/go-ethereum/p2p.(*dialScheduler).readNodes(0xc00021c2c0, {0x18149b0, 0xc0008c6060})
|
||||
github.com/ethereum/go-ethereum/p2p/dial.go:321 +0x9f
|
||||
created by github.com/ethereum/go-ethereum/p2p.newDialScheduler
|
||||
github.com/ethereum/go-ethereum/p2p/dial.go:179 +0x425
|
||||
```
|
||||
|
||||
and
|
||||
```sh
|
||||
debug.stacks("consolecmd.go")
|
||||
```
|
||||
|
||||
returns data that looks like:
|
||||
|
||||
```terminal
|
||||
INFO [11-04|16:16:47.141] Expanded filter expression filter=consolecmd.go expanded="`consolecmd.go` in Value"
|
||||
goroutine 1 [chan receive]:
|
||||
github.com/ethereum/go-ethereum/internal/jsre.(*JSRE).Do(0xc0004223c0, 0xc0003c00f0)
|
||||
github.com/ethereum/go-ethereum/internal/jsre/jsre.go:230 +0xf4
|
||||
github.com/ethereum/go-ethereum/internal/jsre.(*JSRE).Evaluate(0xc00033eb60?, {0xc0013c00a0, 0x1e}, {0x180d720?, 0xc000010018})
|
||||
github.com/ethereum/go-ethereum/internal/jsre/jsre.go:289 +0xb3
|
||||
github.com/ethereum/go-ethereum/console.(*Console).Evaluate(0xc0005366e0, {0xc0013c00a0?, 0x0?})
|
||||
github.com/ethereum/go-ethereum/console/console.go:353 +0x6d
|
||||
github.com/ethereum/go-ethereum/console.(*Console).Interactive(0xc0005366e0)
|
||||
github.com/ethereum/go-ethereum/console/console.go:481 +0x691
|
||||
main.localConsole(0xc00026d580?)
|
||||
github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go:109 +0x348
|
||||
github.com/ethereum/go-ethereum/internal/flags.MigrateGlobalFlags.func2.1(0x20b52c0?)
|
||||
github.com/ethereum/go-ethereum/internal/flags/helpers.go:91 +0x36
|
||||
github.com/urfave/cli/v2.(*Command).Run(0x20b52c0, 0xc000313540)
|
||||
github.com/urfave/cli/v2@v2.17.2-0.20221006022127-8f469abc00aa/command.go:177 +0x719
|
||||
github.com/urfave/cli/v2.(*App).RunContext(0xc0005501c0, {0x1816128?, 0xc000040110}, {0xc00003c180, 0x3, 0x3})
|
||||
github.com/urfave/cli/v2@v2.17.2-0.20221006022127-8f469abc00aa/app.go:387 +0x1035
|
||||
github.com/urfave/cli/v2.(*App).Run(...)
|
||||
github.com/urfave/cli/v2@v2.17.2-0.20221006022127-8f469abc00aa/app.go:252
|
||||
main.main()
|
||||
github.com/ethereum/go-ethereum/cmd/geth/main.go:266 +0x47
|
||||
|
||||
goroutine 159 [chan receive, 4 minutes]:
|
||||
github.com/ethereum/go-ethereum/node.(*Node).Wait(...)
|
||||
github.com/ethereum/go-ethereum/node/node.go:529
|
||||
main.localConsole.func1()
|
||||
github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go:103 +0x2d
|
||||
created by main.localConsole
|
||||
github.com/ethereum/go-ethereum/cmd/geth/consolecmd.go:102 +0x32e
|
||||
```
|
||||
|
||||
If `geth` is started with the `--pprof` option, a debugging HTTP server is made available
|
||||
on port 6060. You can bring up <http://localhost:6060/debug/pprof> to see the heap,
|
||||
running routines etc. By clicking "full goroutine stack dump" you can generate a trace
|
||||
|
@ -111,7 +186,10 @@ and have the stacktrace too, you can use the `-QUIT` signal with `kill`:
|
|||
killall -QUIT geth
|
||||
```
|
||||
|
||||
This will dump stack traces for each instance to their respective log file.
|
||||
This will dump stack traces for each instance to their respective log file. Please do not
|
||||
dump the stack trace into a GH issue as it is very hard for reviewers to read and intepret.
|
||||
It is much better to upload the trace to a Github Gist or Pastebin and put the link in the
|
||||
issue.
|
||||
|
||||
[install-guide]: ../install-and-build/installing-geth
|
||||
[code-review]: ../developers/code-review-guidelines
|
||||
|
|
Loading…
Reference in New Issue