有什么方法可以使Visual Studio C ++错误输出有用?

时间:2019-05-30 10:43:33

标签: c++ visual-studio visual-studio-debugging

在C ++项目上工作时,我发现VS19输出非常无用。考虑在新安装的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 个答案:

答案 0 :(得分:6)

您指定了什么编译器警告级别?如果我使用/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 :(得分:1)

您的MSBuild详细度参数可能太高。转到菜单:工具->选项。然后在左窗格中选择:项目和解决方案->构建并运行。 在那里,您可以选择适当的MSBuild详细程度(从“安静”到“诊断”)

答案 2 :(得分:0)

试图解决您的难题:

  

我得到的是一个带有一些常规文本的新窗口,没有一个   提到问题或问题所在。

     

我发现90%的输出对我无用。

我认为您的意思是Output window,它总是用于显示有关构建过程的输出。

此外,您还可以对自己的应用程序进行编程,以在运行时将诊断消息写入“输出”窗格。为此,请在.NET Framework类库的Debug class命名空间中使用Trace classSystem.Diagnostics的成员。

对于那些具有大量资源文件的大型解决方案或大型项目。生成有时会因未知错误而失败。故障排除需要输出窗口。

如果您认为其大部分信息都没有用,例如 P.PICARD 建议:转到Tools => Projects and Solutions => Build and Run设置其 build输出详细程度(!不要建立日志文件的详细程度)建议您将其更改为最小

如果构建失败,并且想观看整个构建过程的详细信息。将其更改为详细,然后重建项目或解决方案。

  

我想收到的是:“函数在   标记为noexcept”,并将光标设置在有问题的行上。

您是否检查过Error List window?如果消失,请选择“视图”>“错误列表”,或按Ctrl ++ E。

在代码示例中添加两行:

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

导航到“错误列表”窗口(建议您将其设置为 Build and Intellisense ): enter image description here

我想这就是你想要的。错误列表窗口还会显示未初始化或未引用的变量,以改善您的编码。

此外,您可以看到它们的行号。然后双击错误消息,光标将导航到该行。

对于C ++程序,警告级别为w0到w4,可以将其设置为w4以获得较高的警告级别。(默认情况下应为w3)

右键单击project => properties => Configuration Properties => C / C ++ =>警告级别进行设置。 (感谢他的描述,高炉!)

将其更改为w0,没有任何显示。将其更改为w3,它将显示有关My::fb的警告,但不会显示a。(实际上,我不认为您对此进行了更改,因为w3是默认设置)到第4周,然后获得高警告级别并显示所有相关警告。