Страница man dsymutil
указывает, что есть опция dsymutil
, называемая --flat
, которая создает пакет отладки для одного файла с расширением .dwarf
. Я попробовал это, и хотя ожидаемые .dwarf
файлы действительно создаются, не похоже, что lldb
фактически загружает их, в отличие от того, что вы генерируете обычный каталог .dSYM
. Я не могу найти много документации, кроме того, что написано на странице руководства.
Существует ли предполагаемый сценарий для таких файлов, или это то, что осталось от давным-давно, которое больше не должно использоваться?
Это привлекательно, потому что одним файлом проще управлять в системе сборки, чем управлять созданным каталогом .dSYM
.
$ cat > hello_world.cpp
#include <iostream>
int main() {
std::cout << "Hello, World\n";
return 0;
}
$ clang++ ./hello_world.cpp -g -c -o hello_world.o
$ clang++ ./hello_world.o -o hello_world
$ dsymutil ./hello_world
$ tree ./hello_world.dSYM
./hello_world.dSYM
└── Contents
├── Info.plist
└── Resources
└── DWARF
└── hello_world
$ lldb hello_world
(lldb) target create "./hello_world"
Current executable set to './hello_world' (x86_64).
(lldb) image list
[ 0] 7984B8FE-1C4E-3468-9819-C3BE4E50456D 0x0000000100000000 .../hello_world
.../hello_world.dSYM/Contents/Resources/DWARF/hello_world
$ \rm -rf hello_world.dSYM
$ dsymutil --flat ./hello_world
$ file hello_world.dwarf
hello_world.dwarf: Mach-O 64-bit dSYM companion file x86_64
(lldb) target create "./hello_world"
Current executable set to './hello_world' (x86_64).
(lldb) image list
[ 0] 7984B8FE-1C4E-3468-9819-C3BE4E50456D 0x0000000100000000 .../hello_world
[ 1] F217F7F8-A795-3109-B77F-B1E2277F3E3B 0x0000000000000000 /usr/lib/dyld
Как видите, lldb
счастливо и автоматически находит и загружает .dSYM
, но не делает этого для .dwarf
версии файла.
Есть ли способ заставить lldb
загружать эти файлы или, что лучше, загружать их автоматически? Другие инструменты? Есть ли какой-то другой шаг, необходимый для «связывания» исполняемого файла с файлом .dwarf
, как аналог --add-gnu-debuglink
? Или dsymutil --flat
что-то не очень поддерживается и его следует избегать? Есть ли варианты использования для этого?