Я писал программу на C ++, которая требует, чтобы пользователь вводил некоторые данные через консоль. Проблема в том, что когда я пытаюсь ввести ввод во время отладки, то, что я печатаю в консоли, не помещается в переменную. Вместо этого запоминается таинственная строка типа «48-thread-select» (без кавычек). Число в начале в основном случайное, а остальное всегда одинаково. Быстрый поиск в Google показал, что это может быть связано с тем, что Eclipse буферизирует консольный ввод. Я следовал за решением, упомянутым в этом посте здесь:
Отладка Eclipse с вводом из консоли
попытаться заставить Eclipse открыть собственную консоль DOS во время отладки. Однако это не сработало. Теперь программа даже не запускается. Он просто застрял на 91%, говоря «Запуск program.exe (91%)» в правом нижнем углу с полосой загрузки прямо рядом с ним. Скажите, пожалуйста, что я могу сделать, чтобы Eclipse запустил отладчик с родной консоли DOS или, желательно, вообще отключил буферизацию ввода консоли.
Я почти уверен, что странный ввод происходит из-за того, что Eclipse буферизует ввод консоли во время отладки. Я не знаю, что приводит к тому, что программа не запускается и застревает на 91% при попытке запустить встроенную консоль DOS в режиме отладки.
Я попытался сохранить входные данные как в строках стиля std::string
, так и в стиле C, чтобы понять, будет ли это иметь значение, но результат остался прежним. Я также попытался использовать getchar
и std::getline
, когда std::cin
не дал желаемого результата, но это тоже не помогло.
//the following applies to when I DON'T try to start the debugger in a
//native DOS console
std::cout << "Enter string: ";
std::string input;
std::cin >> input;//<-----------------------------------
std::cout << "The input was: " << input << std::endl;//|
//when the instruction pointer is at this line, I type--
//my input into the console, press enter and then step over to the next line
Если не пытаться запустить отладчик на собственной консоли DOS:
Ожидаемый результат:
Enter a string: String
The input was: String
Фактический результат:
Enter a string: String
The input was: 69-thread-select
Сообщения об ошибках:
Под представлением переменных в отладчике, где должны быть значения элементов переменной-члена _M_local_buf
, отображаются следующие ошибки:
Multiple errors reported.
1) Failed to execute MI command:
-var-create - * &((()._M_local_buf))
Error message from debugger back end:
-var-create: unable to create variable object
2) Failed to execute MI command:
-data-evaluate-expression (()._M_local_buf)
Error message from debugger back end:
A syntax error in expression, near `)._M_local_buf)'.
3) Failed to execute MI command:
-var-create - * &((()._M_local_buf))
Error message from debugger back end:
-var-create: unable to create variable object
4) Unable to create variable object
При попытке запустить отладчик в собственной командной строке DOS:
Об ошибках не сообщается. Он просто говорит «Запуск program.exe (91%)» с полосой загрузки, и программа никогда не запускается, сколько бы я ни ждал. Я сидел за своим столом добрых 40 минут сегодня в ожидании запуска программы, но этого не произошло.