使用MSBuild构建Visual Studio解决方案时,我们注意到生成的日志输出在某种程度上混淆了:
6>foo.cpp(819): warning C4100: "param1": unreferenced formal parameterbar.cpp(388): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [C:\src\myproject.vcxproj]
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(2254): note: see declaration of "sscanf"foo.cpp(819): warning C4100: "param2": unreferenced formal parameter
对我而言,它看起来与多个线程在没有正确同步的情况下写入文件时相似。但请注意,构建订单号(在本例中为6)仅出现一次。此摘录周围的行看起来很正常,但日志中会出现类似的错误。我们可以为每个构建重现类似的问题。该问题出现在stdout和日志文件中。
使用以下参数调用msbuild:
/m /p:Configuration=Release /t:rebuild /nr:false /FileLogger /Verbosity:normal /ds solution.sln
使用的版本是14.0.25420.1
在解析有关编译器错误和警告的统计信息的日志时,此问题会导致问题。什么可能导致它的想法?
修改
重现问题的步骤:
使用以下内容向项目添加新文件:
#include <stdafx.h>
#include <cstdio>
#include <iostream>
void foo()
{
int a = 42;
{
int a = 0;
std::cout << a << std::endl;
}
}
void bar()
{
char buffer[50];
int a = 40;
int b = 2;
sprintf(buffer, "%d plus %d is %d", a, b, a + b);
std::cout << buffer << std::endl;
}