Я могу установить точку останова в main и отладить код с правильным исходным кодом, но я не знаю, откуда GDB берет исходный код.
Исходный код отсутствует в CWD.
Как узнать, откуда GDB берет код?
Вы можете использовать команду GDB:
info source
Пример вывода:
Current source file is a.c Compilation directory is /home/user/test Located in /home/user/test/a.c Contains 17 lines. Source language is c. Compiled with DWARF 2 debugging format. Includes preprocessor macro info.
Эта информация хранится в двоичном формате DWARF2 . Итак, для просмотра информации DWARF2 вы можете использовать утилиту dwarfdump. Необходимая информация хранится в поле DW_AT_comp_dir.
использование
(gdb) show directories
, если вы не знаете, где эти каталоги установлены, проверьте в .gdbinit , если есть такие выражения, как
directory /path/to/source
см. Также эту другую ТА тему о gdb
Двоичный файл, вероятно, скомпилирован с "-g" - т.е. отладка.
Используйте команду gdb "show directoryies", чтобы увидеть исходный путь поиска.