Мне нужно установить точки останова в исходном файле cpp. Текущая настройка для вызова цели cpp осуществляется через цель оболочки с дополнительными зависимостями, что означает, что невозможно напрямую вызвать цель cpp в консоли Linux. Когда я искал в Интернете, обычно есть два способа:
Я не знаю, как сделать первый способ, поэтому я выбираю второй способ здесь. Я вставляю sleep(30) в файл cpp, затем в другом терминале открываю gdb и подключаюсь к запущенному процессу. Я подтверждаю, что gdb может остановиться на функции sleep() в gdb. Но проблема в том, что gdb, кажется, знает только контекст функции сна, не зная места вызова функции сна. Если я принудительно установлю точку останова в основной программе, gdb не покажет такого файла. Если я продолжу в gdb, он не остановится ни на каких точках останова, которые я установил в файле cpp.
Вам нужно скомпилировать программу с отладочными символами. В противном случае GDB будет знать только символы в динамической таблице символов. Отключение оптимизации также помогает при отладке. Так что добавляйте флаги -O0 -g
.
Если это невозможно, придется выполнить дизассемблирование пошагово (Ctrl+X, 2).
Большое спасибо за ответ! Включение отладочной сборки работает для меня! На самом деле, я пробовал отладочную сборку раньше, но оказалось, что я сделал это неправильно: сначала я собираю цель с флагом -c dbg, а затем запускаю bazel. Оказывается, каждый раз, когда я вызываю bazel run, сборка будет вызываться автоматически независимо. Следовательно, мне нужно использовать bazel run -c dbg [target], чтобы получить отладочную сборку.