Eclipse/MinGW/CDT/GDB и проблемы с отладкой

У меня есть код на С++ и пытаюсь его отладить. main.cpp:

#include <iostream>
using namespace std;

int main() {
    graph<int> a;
    a.add(1);
    a.addEdge(1,2);
    std::vector<int> answ = a.getAdjacent(1);
    for (unsigned int i = 0; i < answ.size(); i++)
    std::cout<<answ[i]<<std::endl;
    return 0;
}

У меня есть точка останова на "graph a;". Но когда я начинаю отладки, я получаю:

The target endianness is set automatically (currently little endian)
No source file named C:\Users\home\workspace\graphcpp\main.cpp.
[New Thread 3552.0xdc8]

В чем проблема?

Ответ 1

Это, по-видимому, относительно частая проблема повторения при использовании eclipse + cdt с gdb. Изменение запуска по умолчанию из GDB (DSF) Создание процесса для стандартного процесса создания, похоже, чаще всего решает проблему.

Этот параметр можно найти в разделе "Настройки" → "Выполнить/Отладка → Запуск → Пусковые установки по умолчанию":

Default Launchers

Также убедитесь, что вы компилируете с включенной информацией об отлаживании -g.

Ответ 2

Похоже, что только с добавлением стандартных параметров к вашей функции main() достаточно (я заметил, что вы не используете параметры в своем "main()":

проверьте эту ссылку

Я также вижу эту проблему. Люди на LinuxQuestions.org помогли мне добиться определенного прогресса... http://www.linuxquestions.org/info/showthread.php?t=518283

Похоже, что gcc 4.1.0 (то есть в SUSE 10.1, 32-бит) имеет оптимизацию, где, если вы не используете argc и argv в теле main(), эти символы не присутствуют в двоичном (даже с -g и без какой-либо специальной оптимизации). 64-разрядный компилятор не делает этого случайно.

Вы получаете сообщение "Не удается получить доступ к памяти по адресу 0x0" из командной строки gdb, если вы просто "сломаете главный" и напечатаете argc в программе, которая не использует argc/argv (и была скомпилирована с gcc 4.1.0), Я отмечаю, что ваш пример не использует argc/argv.

Это верно для компиляции C или С++.

Eclipse, по-видимому, путается этой ошибкой каким-то образом, когда она попадает в первый разрыв. Я также получал невозможность остановиться на других контрольных точках до тех пор, пока я не добавлю код в ссылку argc/argv или повторно объявляю main (в С++) как "int main (int, char * [])", чтобы Eclipse wasn ' t ожидая этих символов.

В окне вывода gdb все еще есть ошибка (в текущем контексте нет символа "new" ), но могут быть установлены точки останова.

НТН, -nick