Why does lldb only show "dyld" in each stack frame on macOS Ventura?

Question:

I maintain a Python library that’s written in C++ (using Pybind11). For the past couple of years, I’ve been able to debug it just fine with lldb, just by compiling the extension in debug mode (i.e.: disabling optimization and including symbols, with -g).

However, as of lldb-1300.0.42.3 on macOS Ventura 13.1 (22C65), lldb is completely unable to find the symbols and reports every stack frame as being from dyld:

(lldb) bt
* thread #2, stop reason = signal SIGSTOP
    frame #0: 0x0000000187110a00
    frame #1: 0x00000001003700fc dyld
    frame #2: 0x00000001003e2614 dyld
    frame #3: 0x00000001003dfbac dyld
    frame #4: 0x00000001003e3188 dyld
    frame #5: 0x000000010033df20 dyld
    frame #6: 0x000000010033d754 dyld
    frame #7: 0x00000001003dfe28 dyld
    frame #8: 0x00000001003e3188 dyld
    frame #9: 0x000000010033df20 dyld
  * frame #10: 0x000000010033d754 dyld
    frame #11: 0x00000001003dfe28 dyld
    frame #12: 0x00000001003e3188 dyld
    frame #13: 0x000000010033df20 dyld
    frame #14: 0x00000001003e2614 dyld
...

I’ve tried:

  • Ensuring that debug symbols are compiled into the executable
  • Adding a breakpoint on dlopen (which does not get hit)
  • Using image list to show the loaded binary images (which does not include my Python extension)
Asked By: Peter Sobot

||

Answers:

As pointed out by Jim Ingham, lldb version 13 predates macOS Ventura, and doesn’t have the changes required to support debugging with symbols on Ventura. Upgrading to lldb 14+ (via Xcode) fixes the issue.

Answered By: Peter Sobot