Using debuginfo for better backtraces
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 189
- Forks
- 23
- PR merge metrics
- No merged PRs in 30d
Description
This is maybe a better example of the kind of thing I was talking about in https://github.com/oracle/dtrace-utils/issues/84.
With splitdebug (-ggdb3 but in /usr/lib/debug and stripped less), ustack() output is not super friendly:
$ sudo dtrace -n 'syscall::fsync*:return,syscall::sync*:return { ustack(); }'
[...]
6 119674 fsync:return
libc.so.6`fsync+0x10
less`0x5ea421eafd4d
0x5ea421eb85bd
0x5ea421eafa30
0x7796ac9e5407
0x7ffc1f5cecc3
0x2f65686361632f72
In this case, I genuinely didn't know that less would ever call fsync, so I was curious as to where from! But the backtrace isn't so helpful there.
I get better output if I disable stripping and use -fno-omit-frame-pointer:
$ sudo dtrace -n 'syscall::fsync*:return,syscall::sync*:return { ustack(); }'
25 119674 fsync:return
libc.so.6`fsync+0x10
less`quit+0x5d
less`commands+0x83d
0x59897f425a30
0x78803df45407
0x7ffd79035cc3
0x2f65686361632f72
It's not perfect, but it's more than enough for me to pin down what's going on.
Could DTrace learn to read DWARF (elfutils should be able to do this, including understanding splitdebug and so on) for backtraces?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the shown ustack() command and start by tracing how backtraces are symbolized for stripped binaries. Investigate elfutils support for reading DWARF and splitdebug data; done means the example backtrace resolves useful function names instead of raw addresses. No source files or tests are named in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, linux
- Domain
- observability-sre, operating-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100