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

Reply via email to