Путь к исходному файлу не включен в раздел отладки файла ELF.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Путь к исходному файлу не включен в раздел отладки файла ELF.

Сообщение Anonymous »

Я пытаюсь разработать приложение C++ для RTEMS RTOS, но у меня возникли проблемы с отладкой. У них есть базовый пример мигания светодиодом, написанный на C, который я могу отладить. Однако преобразование этого в C++ приводит к тому, что gdb не сможет найти исходный файл.
Если я подключу gdb к приложению C и запущу источники информации, Я вижу свой файл init.c прямо вверху, за которым следуют все источники RTMS. Повторяя это для приложения C++, init.cpp не упоминается. Используя objdump для файлов exe/ELF, я вижу в debug_info и debug_str путь к init.c. Но в приложении C++ нет упоминания о пути к init.cpp.
Приложение C и приложение C++ вложены в один и тот же каталог верхнего уровня и используют тот же файл wscript для настройки компилятора. Оба приложения компилируются с использованием -Og и -g. Что может помешать записи исходного пути в раздел отладки файла ELF?

Соответствующие разделы wscript:Сценарий верхнего уровня

Код: Выделить всё

def build(bld):
rtems.build(bld)
bld.env.CFLAGS += ['-Og','-g']
Скрипт исходного уровня

Код: Выделить всё

def build(bld):
# Create include path nodes
board_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/contrib/libraries/libboard/')
chip_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/include/libchip/')
component_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/include/libchip/include/samv71/component/')
print(chip_inc.abspath())

rtems.build(bld)

bld(features = 'cxx cxxprogram',
target = 'timerpp.exe',
source = ['init.cpp'],
includes = ['.', board_inc, chip_inc, component_inc])
Вот флаги компиляции, отмеченные objdump для версии C (проверьте строку DW_AT_producer):

Код: Выделить всё

: Abbrev Number: 57 (DW_TAG_compile_unit)
   DW_AT_producer    : (indirect string, offset: 0x939): GNU C17 13.2.1 20240412 (RTEMS 6, RSB 89172ba5819a12ea22f49a134008e949daae6c94, Newlib 176b19f) -ftls-model=local-exec -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -march=armv7e-m+fp.dp -g -Og
   DW_AT_language    : 29       (C11)
   DW_AT_name        : (indirect string, offset: 0x760): ../../led/timer/init.c
   DW_AT_comp_dir    : (indirect string, offset: 0x2a93): /home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv
И то же самое для версии C++:

Код: Выделить всё

: Abbrev Number: 51 (DW_TAG_compile_unit)
   DW_AT_producer    : (indirect string, offset: 0x914): GNU C17 13.2.1 20240412 (RTEMS 6, RSB 89172ba5819a12ea22f49a134008e949daae6c94, Newlib 176b19f) -ftls-model=local-exec -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -march=armv7e-m+fp.dp -g -g -g -O2 -O2 -O2 -fbuilding-libgcc -fno-stack-protector -fno-inline -fexceptions -fvisibility=hidden
   DW_AT_language    : 29       (C11)
   DW_AT_name        : (indirect string, offset: 0x227): ../../../../../../gnu-mirror-gcc-54a235e/libgcc/config/arm/unwind-arm.c
   DW_AT_comp_dir    : (indirect string, offset: 0x69): /home/kyle/rtems-core/rtems-source-builder/rtems/build/arm-rtems6-gcc-54a235e-newlib-176b19f-x86_64-linux-gnu-1/build/arm-rtems6/thumb/cortex-m7/hard/libgcc
В этом проекте используется система сборки waf. Это наиболее близко к gcc/ командные строки, как я могу выйти из waf.

Код: Выделить всё

15:33:09 deps scanner for kyle/shell/init.c: []; unresolved: []
{task 139852547300640: c init.c -> init.c.1.o} must run: it was never run before or the task code changed
[10/84] Compiling kyle/shell/init.c
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-gcc', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Og', '-g', '-Ikyle/shell', '-I../../kyle/shell', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../kyle/shell/init.c', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/kyle/shell/init.c.1.o']
15:33:09 deps scanner for kyle/timerpp/init.cpp: []; unresolved: []
{task 139852547300976: cxx init.cpp -> init.cpp.1.o} must run: it was never run before or the task code changed
[11/84] Compiling kyle/timerpp/init.cpp
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-g++', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Ikyle/timerpp', '-I../../kyle/timerpp', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../kyle/timerpp/init.cpp', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/kyle/timerpp/init.cpp.1.o']
15:33:09 deps scanner for led/timer/init.c: []; unresolved: []
{task 139852547301536: c init.c -> init.c.1.o} must run: it was never run before or the task code changed
[12/84] Compiling led/timer/init.c
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-gcc', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Og', '-g', '-Iled/timer', '-I../../led/timer', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../led/timer/init.c', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/led/timer/init.c.1.o']
Это показывает три программы, компилируемые в каталоге примеров. Их пример показан в строке, начинающейся с [12/84] Компиляция светодиода/timer/init.c, и показывает, что флаги из wscript верхнего уровня передаются правильно.
Глядя на другую программу на C, которую я создал в своем личном каталоге, [10/84] Компиляция kyle/shell/init.c, также видно, что флаги передаются правильно.Но когда я пытаюсь скомпилировать программу на C++, как показано в [11/84] Компиляция kyle/timerpp/init.cpp, установленные мной флаги не передаются. Об этом также свидетельствует приведенный выше objdump, показывающий разные флаги и не включающий путь к файлу init.cpp.
Что может вызвать waf передать определенные мной флаги программе C, но не программе C++? И что заставляет g++ не включать путь к исходному файлу в разделы отладки файла ELF?

Подробнее здесь: https://stackoverflow.com/questions/786 ... ug-section
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»