Можете ли вы автоматически определить, какая строка в вашем коде приводит к перерыву компиляции во время сборки другого файла? - PullRequest
0 голосов
/ 30 января 2019

Время от времени я сталкиваюсь с запутанным перерывом в сборке, который я случайно вставил в источник, который произошел, скажем, в последний час с момента последней попытки компиляции.

Например, впроект с именем 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 (или любой другой файл?это происходит из-за того, что) приводит к прерыванию компиляции, сообщаемому другим файлом за пределами вашего источника.

Теперь я точно знаю, что это разрыв в строках 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Студия не может?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...