您能否自动获得另一个文件在构建期间导致编译中断的代码的哪一行?

时间:2019-01-30 03:46:24

标签: visual-studio debugging development-environment visual-studio-debugging

有时,我会遇到一个混乱的构建中断,我偶然输入了发生在某个时间的源代码,例如我上次尝试编译的最后一个小时。

例如,在位于api的名为C:\api的项目中,产生这些错误,

enter image description here

或以文本形式

Error C2672   'std::invoke': no matching overloaded function
found api c:\program files (x86)\microsoft visual
studio\2017\enterprise\vc\tools\msvc\14.16.27023\include\thr\xthread  238 1   

Error C2893   Failed to specialize function template 'unknown-type
std::invoke(_Callable &&,_Types &&...)
noexcept(<expr>)' api c:\program files (x86)\microsoft visual
studio\2017\enterprise\vc\tools\msvc\14.16.27023\include\thr\xthread  237 1

xthread告诉我们它在哪里中断,但不告诉我们main.cpp中哪一行引起错误。

这很简单,可以通过做一些注释(例如注释掉代码)直到停止中断以定位问题线来解决错误。但是,如果自上次编译以来一直做很多事情,即使简单也可能很耗时。

我想知道是否有办法获取main.cpp中的哪一行(或者碰巧是您的任何文件)导致编译中断被您源代码之外的另一个文件报告。 / p>

现在,我知道一个事实,即由于反复试验,它在101的第133行和main.cpp处中断,但是即使我更改了Visual Studio的控制台输出对于Diagnostic的详细程度,在功能所在的任何地方都没有提及101。使用该功能的133在错误上方显示了几行,但是我不能认为在构建中断时非错误消息是1:1,尤其是因为在此之后处理了其他行行和生成错误触发之前。但是为了争辩,这是该行:

1>    c:\api\main.cpp(133): note: see reference to function template instantiation  
'std::thread::thread<winrt::Windows::Foundation::IAsyncOperation<bool>(__cdecl  
Consuming_Class::* )(unsigned __int64,API),unsigned __int64&,const API&,void>(_Fn 
 &&,unsigned __int64 &,const API &)' being compiled

如果您必须遍历构建日志以寻找类似错误上方的提示,那么如果可以假设(我不是)那不是红色,那至少有帮助-鲱鱼。但是,如果这是一条红鲱鱼,那么我们将回到试错法。

Visual Studio中是否有一种方法可以自动 从您的源中获取导致问题的实际行,而不是尝试进行构建时从外部源返回的报告?

如果我关于不能安全地假设上面的行是故障行的假设在100%的时间内被证明是错误的,那么是否有类似插件的东西可以使Visual Studio能够更轻松/更快地完成此过程? t?

0 个答案:

没有答案