Как предполагается использовать опцию --flat для dsymutil - PullRequest
2 голосов
/ 28 апреля 2019

Страница 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 что-то не очень поддерживается и его следует избегать? Есть ли варианты использования для этого?

1 Ответ

1 голос
/ 03 мая 2019

Параметр --flat действительно не поддерживается.Он существует для тестирования, где мы обычно хотим проверять сгенерированный DWARF, а не структуру пакета dSYM, которая всегда должна быть одинаковой.

...