Есть ли способ сделать вывод ошибок Visual Studio C ++ полезным? - PullRequest
0 голосов
/ 30 мая 2019

Я считаю вывод 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», и курсор находится на проблемной строке.То, что я получаю, - это новое окно с некоторым общим текстом, ни в одном из которых не упоминается проблема или где проблема.

Ответы [ 3 ]

6 голосов
/ 30 мая 2019

Какой уровень предупреждения компилятора вы указали? Если я использую опцию /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

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

1 голос
/ 30 мая 2019

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

0 голосов
/ 31 мая 2019

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

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

Я считаю, что 90% продукции для меня бесполезны.

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

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

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

Если вы считаете, что большая часть его информации бесполезна, например, P.PICARD предлагает: Go Tools => Projects and Solutions => Build and Runчтобы установить подробность вывода сборки (! Не указывать многословность файла журнала) Я предлагаю изменить его на Минимальное .

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

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

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

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

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

Перейдите в окно «Список ошибок» (предлагаюустановите его как Build and Intellisense ): enter image description here

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

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

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

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

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

...