July 19, 2017dsymutil on OSX
Hi all, I have spent almost two hours figuring out why I didn't see line numbers in the stack traces output by AddressSanitizer. Or: I _am_ seeing them when running the sanitized binary manually, but do not see line numbers when running an automated (lit-based) test. Finally, it turns out that llvm-symbolizer does not show line numbers in stack traces for our binaries unless dsymutil is run on the executable. AddressSanitizer automatically searches the path for llvm-symbolizer, and our lit-based testsuite adds the llvm bin dir to the path, so it will find llvm-symbolizer. When running the sanitized binary manually, llvm-symbolizer was not on the path, and apparently another symbolizing method is used that _does_ show line numbers. There is a note about this in Address Sanitizer documentation... :( See: https://github.com/google/sanitizers/issues/207 Clang runs dsymutil (depending on what kind of build is done), to prevent exactly these kinds of problems. Running dsymutil makes linking slower, so I don't know whether we want to add this or not. What do you think? Mainly I want to tell you that if you are seeing missing debuginfo issues, you should check whether they are resolved after running dsymutil on the executable. - Johan Off topic: I also found that OSX only supports Dwarf version 2 (instead of our higher default): https://github.com/rust-lang/rust/issues/11352 But I see in Clang's source that since OSX 10.11 (El Capitan, the one I am on, lagging behind one version), Dwarf 4 is supported.
Copyright © 1999-2018 by the D Language Foundation