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

Is there any way to make Visual Studio C++ error output useful?

我发现在处理 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;
}

我想收到的是:"Function throws an exception while marked as noexcept",光标放在有问题的行上。我得到的是一个新的 window,其中包含一些通用文本,其中 none 提到了问题或问题所在。

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

注意:诊断消息包括行号和列号。如果您 double-click 错误消息,它会将光标移动到有问题的行。

您的 MSBuild verbosity 参数可能太高了。转到菜单:工具 -> 选项。然后在左侧窗格 select:项目和解决方案 -> 构建和 运行。 在那里你可以 select 适当的 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.

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

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

对于那些拥有大量资源文件的大型解决方案或大型项目。构建有时会因未知错误而失败。输出 window 对于 trouble-shooting 是必需的。

如果您认为它的大部分信息没有用,例如 P.PICARD 建议:Go Tools=>Projects and Solutions=>Build and 运行 set它的构建输出详细程度(!不是构建日志文件详细程度)我建议您将其更改为最小

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

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

你检查过Error List window了吗?如果它消失了,请选择“查看”>“错误列表”,或按 Ctrl++E。

在您的代码示例中添加两行:

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

导航到错误列表 window(我建议您将其设置为 Build 和 Intellisense):

我想这就是你想要的。并且错误列表 window 还指示未初始化或未引用的变量以改进您的编码。

此外,您还可以看到他们的行号。和 Double-click 错误消息,光标将导航到该行。

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

Right-click project=>properties=>Configuration Properties=>C/C++=>Warning Level 进行设置。 (已由 Blastfurance 描述,感谢他!)

改成w0,没有显示。将其更改为 w3,它会显示有关 My::fb 的警告,但不会显示 a。(实际上我不认为您对此进行更改,因为默认情况下 w3 是)更改它到 w4 然后获得高警告级别和所有相关的警告显示。