#c #gdb
#c #gdb #c
Вопрос:
#include <iostream>
int main ()
{
int* a = new int[15];
a[0] = 42;
a[1] = 43;
std::cerr << a[0];
return 0;
}
gdb говорит a = 0xffffffff, а ‘print a[0]’ выдает ‘не удается получить доступ к адресу памяти’, но почему? При запуске за пределами gdb программа выводит ’42’, как и ожидалось. Что здесь вообще происходит? Скомпилирован с помощью ‘g test2.cpp -gstabs -O0 -o тест2’.
Комментарии:
1. Вы уверены, что не пытаетесь получить доступ
a
передnew
вызовом?
Ответ №1:
На какой платформе вы находитесь? Формат gstabs debugger поддерживается не повсеместно, если вы хотите его использовать, вы должны ознакомиться с интересными различиями между COFF, DWARF 2 и, возможно, некоторыми другими форматами exe / debug, о которых я никогда не слышал. Итог — прочитайте руководство по gdb. Но ваш код почти наверняка будет работать правильно, если вы просто используете флаг -g .
Комментарии:
1. Я начал использовать stabs несколько лет назад, когда у меня возникли проблемы с отладкой программы на c . Я перепробовал все форматы и stabs был единственным, который работал правильно в то время. С тех пор я придерживаюсь этого, и это первая проблема, с которой я столкнулся.
Ответ №2:
Да, я могу воспроизвести это, но только с -gstabs
Итак: почему вы используете -gstabs
?
Звучит нечестно, но это честный вопрос, какое преимущество stabs дает «обычной» отладочной информации?