Как получить отладочные символы при компиляции с помощью clang в Windows - PullRequest
0 голосов
/ 26 сентября 2019

У меня проблемы с настройкой отладчика при настройке clang на моем компьютере с Windows 10.Компиляция, кажется, работает хорошо, по крайней мере, для простой программы "Здравствуй, мир", которую я попробовал.Однако, когда я пытаюсь запустить отладчики lldb или gdb в этой тестовой программе (или любой другой программе, которую я пробовал), она не распознает имена функций.

Вот мой код программы на C:

#include <stdio.h>

int main(void) {
    puts("Hello, world!");
    return 0;
}

Ничего особенного, я знаю.Я компилирую с помощью следующей команды:

> clang -g -O0 hello.c -o hello.exe

Затем я пытаюсь запустить отладчик:

> lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b main
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) r
Process 12156 launched: 'C:\Users\********\Projects\clang-test\hello.exe' (x86_64)
Process 12156 exited with status = 0 (0x00000000)
(lldb)

Видимо, символ "основной" не был распознан, и программа неостановка в начале функции "main", но выполнение до завершения (в другом окне консоли, следовательно, здесь нет вывода программы).

Как заставить работать символы отладки?В другом ответе stackoverflow я обнаружил, что добавление опций компилятора "-g -O0" должно сработать, но, как вы видите, это не решает проблему для меня.Я также нашел другой ответ stackoverflow о том, как настроить отладку, если код не находится в том же каталоге, что и исполняемый файл, но это не относится к моему случаю: текущий рабочий каталог совпадает с каталогом с кодом и исполняемым файлом.в них.

Некоторая информация о версии:

> clang --version
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

> lldb --version
lldb version 9.0.0

1 Ответ

0 голосов
/ 26 сентября 2019

Параметры "-g -O0", которые вы указали, действительно должны позволить отладчику знать все необходимые ему символы из исполняемого файла.

Поэтому я подозреваю, что проблема в другом месте, возможно, с вашим терминалом или вашимверсия / реализация LLDB.

Используете ли вы командную строку windows cmd.exe?или что-то еще, как Powershell?Мне никогда не удавалось заставить отладчики работать должным образом в этих средах, но это было намного проще с Cygwin , который представляет собой оболочку bash для Windows (он создает «симулированную» среду linux в своей папке установки, поэтомуу вас есть все папки / usr, / bin, / etc, в которых нуждается оболочка bash). Таким образом, вы действительно можете использовать gdb так же, как в системе UNIX.

Если приведенный выше метод звучит как болеехлопот, чем выигрыша времени, тогда да, я бы вообще рекомендовал другой отладчик, например отладчик Visual Studio.На самом деле, возможно, инструмент для анализа памяти, такой как Dr.Memory , может дать вам то, что вам нужно

...