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