Время от времени я сталкиваюсь с запутанным перерывом в сборке, который я случайно вставил в источник, который произошел, скажем, в последний час с момента последней попытки компиляции.
Например, впроект с именем api
, расположенный по адресу C:\api
, генерирующий эти ошибки,
![enter image description here](https://i.stack.imgur.com/DX0GR.png)
или в текстовой форме,
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
(или любой другой файл?это происходит из-за того, что) приводит к прерыванию компиляции, сообщаемому другим файлом за пределами вашего источника.
Теперь я точно знаю, что это разрыв в строках 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Студия не может?