Awesome and super useful work. I really hope it'll help us to detect the guilty patches.
Calixte Le ven. 5 avr. 2019 à 18:34, Nathan Froyd <nfr...@mozilla.com> a écrit : > TL;DR: We're making some changes to how inlined functions are handled > in our crash reports on non-Windows platforms in bug 524410. This > change should mostly result in more understandable crash stacks for > code that uses lots of inlining, and shouldn't make things any worse. > Some crash signatures may change as a result. If you have concerns, > or you happen to have crash stacks that you're curious about whether > they'd change under this new policy, please comment in bug 524410 or > email me. > > For the grotty details, read on. > > Modern C++/Rust code relies on inlining for efficiency, and modern > compilers have gotten very good at accommodating such code: it's not > unusual for code to feature double-digit levels of inlining (A inlined > into B inlined into C...inlined into J). A simple Rust function that > looks like: > > slice.into_iter().map(|...| { ... }) > > and you think of as spanning addresses BEGIN to END, might actually > feature small ranges of instructions from a dozen different functions, > and the compiler will (mostly) faithfully tell you a precise location > for each range. (Instruction A comes from some iterator code, > instruction B comes from a bit of your closure, instruction C comes > from some inlined function three levels deep inside of your > closure...) Unfortunately, this faithfulness means that in the event > of a crash, the crashing instruction might get attributed to some code > in libstd with no indication of how that relates to the original code. > > Bug 524410, supporting inline functions in the symbol dumper, has been > open for a decade now. The idea is that compilers (on Unix platforms, > not entirely sure this is true on Windows) will not only give you > precise information about what function particular instruction ranges > come from, they will also give you information about the chain of > inlining that resulted in those particular instructions. The symbol > dumper ought to be able to emit enough information to reconstruct > "frames" from inlined functions. That is, if you have: > > ``` > addr0 ---+ > ... | A > addr1 ---+ > addr2 ---+ ---+ ------+ > ... | B | | > addr3 ---+ | operator+ | > addr4 ---+ | | > ... | C | | > addr5 ---+ ---+ | DoTheThing > addr6 ---+ ---+ | > ... | D | | > addr7 ---+ | operator[] | > addr8 ---+ | | > ... | E | | > addr9 ---+ ---+ ------+ > ... > ``` > > (apologies if the ASCII art doesn't come through), and you're crashing > at `addr6`, the status quo is that you know you crashed in `D`, and > the next frame is whoever called `DoTheThing`. The ideal state of > affairs is that you're told that you crashed in `D`, called from > `operator[]`, called from `DoTheThing`, and so forth. > > We're not there yet. Changing the symbol dumper to emit this > information requires changing the symbol file format, which requires > some coordinated updates to several pieces of infrastructure (and > probably others that I don't know about). It also requires discussion > with upstream Breakpad (and therefore breaking many more consumers > than just Mozilla-internal ones) and/or forking Breakpad completely > and/or rewriting all our tools (which is a special case of forking). > We want to get to that end state, but it's a fair bit of work. > > The patches on the bug implement a truncated version of the above that > doesn't require dumping the entire inlining hierarchy. The idea is > that, as much as possible, for addresses in some function, you want to > attribute those addresses to source code lines for said function. So > instead of recording the most precise lines possible (A, B, C, D, E, > etc. in the above), you want to simply attribute the entire range of > B-E to `DoTheThing`. This transformation loses information, but it > tends to produce stack traces that make more sense to humans. You can > see some examples of the changes in: > > https://bugzilla.mozilla.org/show_bug.cgi?id=524410#c22 > https://bugzilla.mozilla.org/show_bug.cgi?id=524410#c29 > > which result in more sensible crash stacks, even if they don't > immediately point out what's going wrong. > > This work has not landed yet, but should land sometime next week. If > you have concerns, or you happen to have crash stacks that you're > curious about whether they'd change under this new policy, please > comment in bug 524410 or email me. > > Thanks, > -Nathan > _______________________________________________ > Stability mailing list > stabil...@mozilla.org > https://mail.mozilla.org/listinfo/stability > _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform