帮 vs2019 找回丢失的 SDK
緣起
前一段時(shí)間,有網(wǎng)友遇到一個(gè)奇怪的問(wèn)題,說(shuō)他機(jī)器上的 vs2019 編譯 C++ 工程報(bào)錯(cuò)。我當(dāng)時(shí)一聽(tīng)就有兩個(gè)懷疑:
工程設(shè)置不對(duì)。
vs2019 沒(méi)裝好。
因?yàn)樾陆ㄒ粋€(gè)最簡(jiǎn)單的工程,編譯也報(bào)一樣的錯(cuò)誤,所以可以排除工程設(shè)置的問(wèn)題了。那只有可能是 vs2019 的問(wèn)題了。但是具體是哪里的問(wèn)題呢?
他按照錯(cuò)誤提示搜索到了如下鏈接:
https://developercommunity.visualstudio.com/content/problem/761788/msb8036-the-windows-sdk-version-100183620-was-not.html
根據(jù)鏈接里的提示,做過(guò)嘗試,沒(méi)能解決問(wèn)題。后來(lái)在我們溝通的過(guò)程中,他自己解決了問(wèn)題,這不就是大名鼎鼎的橡皮鴨調(diào)試法嗎?當(dāng)他的問(wèn)題解決后,我特意在本地重現(xiàn)了整個(gè)過(guò)程,做了一些調(diào)查,整理成本文,分享給大家。
編譯受阻
我用 vs2019 新建了一個(gè)最簡(jiǎn)單的 Hello world 工程,編譯,報(bào)錯(cuò)如下:
Error MSB8037 The Windows SDK version 10.0.18362.0 for Desktop C++ x86 Apps was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution".
更直觀的報(bào)錯(cuò)截圖如下:
問(wèn)題排查
既然提示找不到對(duì)應(yīng)版本的 SDK,那么先到工程屬性里看一下對(duì)應(yīng)的配置。在工程上,右鍵 -> 屬性 。在工程屬性對(duì)話框中選擇 Configuration Properties 下的 General 。在右側(cè)查看 Windows SDK Version 的值,確實(shí)是 10.0.18362.0,如下圖。
工程 SDK Version 配置本地搜一下10.0.18362.0,看看本地是否存在相關(guān)的路徑。
everything 搜索結(jié)果本地也存在相關(guān)路徑。能想到的可以懷疑的地方都排除了。接下來(lái)請(qǐng)出我們的老朋友 —— process monitor 。
深入調(diào)查
打開(kāi) process monitor,開(kāi)啟監(jiān)視,在 vs 中開(kāi)始編譯,問(wèn)題重現(xiàn)后,停止監(jiān)視。
下面就要進(jìn)行最重要的步驟了—— 過(guò)濾。
使用 process monitor 快速解決問(wèn)題的關(guān)鍵在于過(guò)濾出與問(wèn)題有關(guān)的事件!
我們需要根據(jù)什么條件過(guò)濾呢?
一般操作結(jié)果是成功的事件對(duì)我們幫助不大,所以首先過(guò)濾掉 Result 是 SUCCESS 的事件。
既然提示的是找不到 10.0.18362.0 版本的 SDK ,相關(guān)錯(cuò)誤應(yīng)該和 10.0.18362.0 有關(guān),所以只保留 Path 中包含 10.0.18362.0 的記錄。
沒(méi)想到,效果這么好,只有六條。
其中,有兩條是注冊(cè)表中找不到 HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0.18362.0(這個(gè)注冊(cè)表項(xiàng)不是必須存在的,在能正常編譯的機(jī)器上也可能找不到),最后一條是找不到文件 C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\sdkddkver.h。看來(lái),應(yīng)該是我本地少了這個(gè)文件。因?yàn)槲夜室獍堰@個(gè)文件重名了,改回來(lái),重新編譯,搞定。
具體調(diào)查過(guò)程請(qǐng)參考下面的屏幕錄像。
troubleshoot-missing-sdk-10.0.18362.0-screen-record后記
跟這位網(wǎng)友溝通的整個(gè)過(guò)程特別順暢,省心。他已經(jīng)根據(jù)線索在網(wǎng)上搜索了相關(guān)資料,自己摸索了一番。懷疑哪里有問(wèn)題,立刻能查看相關(guān)的配置進(jìn)行排查。最后,在溝通的過(guò)程中,他自己就把問(wèn)題解決了。原來(lái),他在前幾天把一些文件的位置給改了,改回來(lái)就好了。后來(lái)聊天得知,他才大二,后生可畏!
總結(jié)
在幫網(wǎng)友解決問(wèn)題的過(guò)程中,我扮演的角色其實(shí)類似 “橡皮鴨”。也希望大家遇到問(wèn)題時(shí),把問(wèn)題描述給周圍的人,也許自己就知道問(wèn)題出在哪了。屢試不爽!
猜你喜歡:
VS 系列:
排錯(cuò)實(shí)戰(zhàn)——解決c++編譯錯(cuò)誤:error C2059: illegal token on right side of '::'
善用 vs 中的錯(cuò)誤列表和輸出窗口,高效查找 C++ 多工程編譯錯(cuò)誤
轉(zhuǎn)儲(chǔ)文件系列:
轉(zhuǎn)儲(chǔ)系列文章總結(jié)
轉(zhuǎn)儲(chǔ)文件知多少
你需要知道的 N 種抓取 dump 的工具
你生成的轉(zhuǎn)儲(chǔ)文件有問(wèn)題嗎?
向大廠看齊!為自己的程序增加自動(dòng)轉(zhuǎn)儲(chǔ)的功能!
內(nèi)核轉(zhuǎn)儲(chǔ),開(kāi)抓啦!
藍(lán)屏(BSOD)轉(zhuǎn)儲(chǔ)設(shè)置,看本文就夠了!
系統(tǒng)藍(lán)屏的幾種姿勢(shì),確定不了解下么?
本地內(nèi)核調(diào)試環(huán)境搭建,就這么簡(jiǎn)單!
雙機(jī)內(nèi)核調(diào)試 101
使用 VMware + win10 + VirtualKD + windbg 從零搭建雙機(jī)內(nèi)核調(diào)試環(huán)境
使用 VMware + win10 + vs2019 從零搭建雙機(jī)內(nèi)核調(diào)試環(huán)境
本地內(nèi)核調(diào)試神器 —— livekd 使用總結(jié)
調(diào)試系列:
調(diào)試實(shí)戰(zhàn)——你知道怎么使用DebugView查看調(diào)試信息嗎?
調(diào)試實(shí)戰(zhàn)——程序CPU占用率飆升,你知道如何快速定位嗎?
調(diào)試實(shí)戰(zhàn)——崩潰在ComFriendlyWaitMtaThreadProc
調(diào)試實(shí)戰(zhàn)——使用windbg調(diào)試崩潰在ole32!CStdMarshal::DisconnectSrvIPIDs
調(diào)試實(shí)戰(zhàn)——調(diào)試PInvoke導(dǎo)致的內(nèi)存破壞
調(diào)試實(shí)戰(zhàn)——調(diào)試excel啟動(dòng)時(shí)死鎖
調(diào)試實(shí)戰(zhàn)——調(diào)試DLL卸載時(shí)的死鎖
調(diào)試實(shí)戰(zhàn)——調(diào)試TerminateThread導(dǎo)致的死鎖
調(diào)試實(shí)戰(zhàn)——從堆里找回“丟失”的代碼
調(diào)試實(shí)戰(zhàn)——從堆里找回“丟失”的代碼相關(guān)命令簡(jiǎn)介
排錯(cuò)系列:
排錯(cuò)實(shí)戰(zhàn)——1分鐘解救 run 不出來(lái)的 Autoruns
排錯(cuò)實(shí)戰(zhàn)——VS清空最近打開(kāi)的工程記錄
排錯(cuò)實(shí)戰(zhàn)——拯救加載調(diào)試符號(hào)失敗的IDA
排錯(cuò)實(shí)戰(zhàn)——你知道拖動(dòng)窗口時(shí)只顯示虛框怎么設(shè)置嗎?
排錯(cuò)實(shí)戰(zhàn)——解決Tekla通過(guò).tsep安裝插件失敗的問(wèn)題
排錯(cuò)實(shí)戰(zhàn)——使用process explorer替換任務(wù)管理器
排錯(cuò)實(shí)戰(zhàn)——通過(guò)對(duì)比分析sysinternals事件修復(fù)程序功能異常
歡迎留言交流
需要你的
總結(jié)
以上是生活随笔為你收集整理的帮 vs2019 找回丢失的 SDK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASP.NET Core在Docker下
- 下一篇: .net core HttpClient