On Fri, 21 Jul 2023, Cristian Adam wrote:
Right, lldb was using the DWARF debugging information 🙁
I've attached 3 screenshots of Qt Creator using lldb:
1. Unstripped MaxiDump.exe showed the bad source line and the correct
stacktrace (due to DWARF information)
2. Stripped MaxiDump.exe with LLVM MinGW's lldb showed only assembly with
bad stacktrace
3. Stripped MaxiDump.exe with the official llvm.org binaries (MSVC flavor)
showed also assembly but with proper stacktrace.
If this was from the same build of MaxiDump.exe - if the debug info for
the relevant translation units was written as DWARF, it probably wasn't
written as CodeView for PDB. Or was that based on a new build where you
made sure "-g -gcodeview" was used in more places?
IIRC it's possible to generate both DWARF and CodeView debug info at the
same time too, but I haven't looked into how to do that (if it'd be enough
to just add a -gdwarf or something like that?).
For number 3 I've tried with a copy of "c:\Program Files (x86)\Microsoft
Visual Studio\2019\BuildTools\DIA SDK\bin\amd64\msdia140.dll" in "c:\Program
Files\LLVM\bin" and without.
I know that the llvm.org lldb binary is built using DIA SDK.
Indeed, LLVM/LLDB's own PDB support is incomplete - it works for some
cases but not everything.
Then I decided to test clang-cl 16.0.6 and test the two lldb.exe versions.
The LLVM MinGW (stripped) binary and dmp files:
* MaxiDump.exe 15,872 bytes
* MaxiDump.dmp 29,878,132 bytes
The clang-cl binary and dmp files:
* MaxiDump.exe 15,360 bytes
* MaxiDump.dmp 28,460,315 bytes
They ware more or less the "same".
Then I loaded the "core" file and the results are:
* MSVC lldb.exe loaded the source file, but pointed at the wrong line,
also the stack trace was missing one level
* MinGW lldb.exe loaded the source file at the right location and the
stacktrace was fine!
Now that's odd...
Since MinGW lldb.exe can load a MiniDump file produced by clang-cl just
fine, I assume there is a bug in the generation step of the MiniDump when
using the llvm mingw binaries.
Hmm, that's possible.
In any case, if the main intended usecase is with lldb, then using DWARF
for the debug info should probably be the best supported path.
I'll see if I can reproduce your results and maybe look into things at
some point...
If you can fill in the github issue with reproduction steps in the form of
exact compilation commands (bypassing cmake, just running a single command
to compile+link is clearest) - from the ground up, compiling, stripping,
running executables, running command line lldb to inspect the results -
it'd be a bit more straightforward to look into and pinpoint potential
issues.
At least from the looks of your cmake file, you're passing the -Wl,--pdb=
option for writing a PDB file, but you're not specifying -gcodeview
anywhere, so it uses the toolchain default of generating DWARF debug info
only.
// Martin
--
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development