Есть ли способ сделать вывод ошибок Visual Studio C++ полезным?

Я считаю вывод VS19 совершенно бесполезным при работе над проектом C++. Рассмотрим запуск примера кода на только что установленном VS19:

#include <iostream>  

using namespace std;
class My
{
    public:
    void f() noexcept
    {
        throw exception{"A problem sir!"};
    }
};

int main() 
{
    try 
    {
        My m;
        m.f();
    }
    catch (exception& ex)
    {
        cout << "exception caught! " << ex.what() << endl;
    }
    return 0;
}

Я хотел бы получить следующее: «Функция выдает исключение, помеченное как noexcept», и курсор установлен на проблемной строке. Что я получаю, так это новое окно с некоторым общим текстом, ни в одном из которых не упоминается проблема или где проблема.

"новое окно с некоторым общим текстом" Какой текст? В каком смысле он "общий"?
Lightness Races in Orbit 30.05.2019 13:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
180
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Какой уровень предупреждения компилятора вы указали? Если я использую параметр /W0, диагностики нет, но с любым другим значением, от /W1 до /W4, компилятор выводит следующие строки:

1>filename.cpp(9,1): warning C4297:  'My::f': function assumed not to throw an exception but does
1>filename.cpp(9,1): message :  __declspec(nothrow), throw(), noexcept(true), or noexcept was specified on the function

Примечание: диагностические сообщения включают номера строк и столбцов. Если дважды щелкнуть сообщение об ошибке, курсор переместится на строку с ошибкой.

Ваш параметр детализации MSBuild может быть слишком высоким. Перейдите в меню: Инструменты -> Параметры. Затем на левой панели выберите: Проекты и решения -> Сборка и запуск. Там вы можете выбрать подходящую степень детализации MSBuild (от тихой до диагностической).

Ответ принят как подходящий

Пытаясь решить вашу загадку в вашем вопросе:

What I get is a new window with some general text, none of which mentions the problem, or where the problem is.

I find 90% of output useless for me.

Я думаю, что вы имеете в виду Окно вывода, он всегда используется для отображения вывода о процессе сборки.

Кроме того, вы также можете запрограммировать свои собственные приложения для записи диагностических сообщений во время выполнения на панель вывода. Для этого используйте элементы Класс отладки или Класс трассировки в пространстве имен Система.Диагностика библиотеки классов .NET Framework.

Для тех больших решений или больших проектов, в которых много файлов ресурсов. Сборка иногда завершается сбоем с неизвестной ошибкой. Окно вывода необходимо для устранения неполадок.

Если вы считаете, что большая часть его информации бесполезна, как предлагает П.ПИКАРД: перейдите в Инструменты => Проекты и решения => Сборка и запуск, чтобы установить его построить многословие вывода (! Не строить подробность файла журнала), я предлагаю вам изменить его на Минимальный.

Если у вас возникла неудачная сборка и вы хотите посмотреть подробности всего процесса сборки. Измените его на Подробный и перестройте проект или решение.

What I would like to receive is: "Function throws an exception while marked as noexcept", and the cursor set on the problematic line.

Вы проверили Окно списка ошибок? Если оно исчезло, выберите «Вид» > «Список ошибок» или нажмите Ctrl++E.

Добавьте две строки в пример кода:

int main()
{
    int a = 2;
    int b;
...
}

Перейдите в окно списка ошибок (я предлагаю вам установить его как Сборка и Intellisense):

Я думаю, это то, что вы хотите. И окно списка ошибок также указывает переменную, которая не инициализирована или на которую не ссылаются для улучшения вашего кодирования.

Кроме того, вы можете увидеть их номера строк. И дважды щелкните сообщение об ошибке, курсор переместится на эту строку.

Для программы C++ уровень предупреждения от w0 до w4, вы можете установить его w4, чтобы получить высокий уровень предупреждения (по умолчанию должен быть w3).

Щелкните правой кнопкой мыши проект=>свойства=>Свойства конфигурации=>C/C++=>Уровень предупреждения, чтобы установить его. (Описано Взрывная фура, спасибо ему!)

Измените его на w0, ничего не показывает. Измените его на w3, и он будет отображать предупреждения о My::f и b, но не a. (На самом деле я не думаю, что вы вносите изменения в это, потому что w3 по умолчанию) Измените его на w4, затем получите высокий уровень предупреждения и все связанные с ним отображаются предупреждения.

Спасибо, это помогло. Я перешел из другой IDE, где проблемы показывались мне в лицо в удобной для пользователя форме :) Меня озадачило исчезновение окна со списком ошибок. Важнейшее информационное окно, которое я должен включить через меню, чтобы найти, в чем проблема? Но кто я такой, чтобы судить, хоть способ есть :) Спасибо огромное!

Problem Sir 31.05.2019 12:41

Рад узнать, что это помогает. Хорошего дня:)

LoLance 31.05.2019 12:45

Другие вопросы по теме