Обычно с помощью gcc вы можете указать уровень отладочной информации с помощью -g, и если вы используете -g3, он будет включать определения макросов препроцессора в исполняемый файл, которые отладчики, такие как gdb, могут читать и позволять вам использовать во время отладки. Я хотел бы сделать это с помощью nvcc для отладки программ CUDA.
В настоящее время я работаю, изменяя шаблонную программу в SDK, поэтому я использую Makefile по умолчанию и common.mk, включенные в Makefile. В common.mk в блоке 'ifeq ($ (dbg), 1)' я пробовал следующее:
- поставить -g3 под COMMONFLAGS
- поставить -g3 под NVCCFLAGS
- поставить -g3 под CXXFLAGS и CFLAGS
- положить --compiler-options -g3 под NVCCFLAGS.
Первые два дают нераспознанную ошибку опции. Вторые два, похоже, не работают, потому что когда я отлаживаю с помощью cuda-gdb, я не получаю информацию о макросах.
Причина, по которой я хотел бы сделать это, заключается в том, что я хотел бы проверить некоторую память, используя те же макросы, которые сама программа использует для доступа к этой памяти. Например,
#define ARROW(state, arrow) ((c_arrow_t *)(&((state)->arrows) + (arrow) * sizeof(c_arrow_t)))
#define STATE(nfa, state) ((c_state_t *)(&((nfa)->states) + (state) * sizeof(c_state_t)))
- некоторые макросы, которые я использую для доступа к состояниям и стрелкам недетерминированного автомата конечных состояний.
Спасибо за помощь!