fliter 視圖
visual studio默認是filter視圖(中文為篩選器)
項目下的是filter而非硬盤目錄裏實際的文件夾,這時新建的也是filter
想要查看硬盤目錄裏實際的文件夾,點擊按鈕“show all files(顯示所有文件)”即可
輸出文件位置設置
自定義輸出文件位置:
右鍵項目,選擇“Properties(屬性)”->“General”->“Output Directory”“Intermediate Directory”(圖中展示選項的中文)
注意“Configuration(配置)“為”All Configurations(所有配置)”,“Platform(平台)”為“All Platforms(所有平台)”
這邊也給出大佬們喜歡用的設置:
Output Directory:$(SolutionDir)bin\$(Platform)\$(Configuration)\
Intermediate Directory:$(SolutionDir)bin\intermediates\$(Platform)\$(Configuration)\
如果你看不懂其指代的具體路徑,對路徑選擇“Edit(編輯)”->“Macros”即可查看
應用後可以右鍵解決方案,選擇“Clean Solution(清理解決方案)”即可去掉舊文件
查看預處理結果
首先簡答介紹一下編譯器的工作原理:編譯器首先處理預處理語句,將頭文件內容全部複製到代碼文件中;其次編譯器將所有C++代碼轉化為機器碼,每個cpp文件都被編譯成一個目標文件(.obj);最後將獨立的目標文件合併成一個可執行文件
Visual Studio默認不輸出預處理的結果,想要查看預處理結果需要在“Properties(屬性)”->“C/C++”->“Preprocessor”中,將“Preprocess to File”設置為“Yes”(確保編輯的是當前的配置),編譯後機會輸出預處理文件(.i)
將目標文件轉換為可讀的彙編
編譯器編譯文件時,每個cpp文件都被編譯成一個目標文件(.obj),出於一些調試需求,我們可能需要閲讀編譯出的彙編語言
在“Properties(屬性)”->“C/C++”->“Output Files”中,修改“Assembler Output”即可
自定義程序入口
一個可執行文件一定是以main函數為入口嗎?答案是否定的
在“Properties(屬性)”->“Linker”->“Advanced”中,可以自定義Entry Point
調試時查看變量在內存中的具體值
最常見的是用autos,locals和watch監視變量:
- autos(自動變量窗口):顯示當前行和前幾行代碼中使用的變量,以及下一個將要執行的行中的變量
- locals(局部變量窗口):顯示當前作用域中的所有局部變量及其值
- watch(監視窗口):允許手動添加並監視任意變量、表達式或內存地址
(這裏對象p的成員變量Name沒有賦值)
一個更高級的方法是查看變量在內存中的具體值:“DEBUG”->“Windows”->“Memory”->“Memory 1”
在“Address”中輸入變量的內存地址(別忘了使用&取址)即可找到變量在內存中的具體值
這裏我輸入了一個字符串指針,其指向字面量"hello",可以發現內存存儲的內容對應了"hello"的 ASCII 編碼,只不過由於是64位,因此字符串指針默認為8字節
查看代碼的反彙編
在調試時,右鍵“Go To Disassembly”
如文章有誤或疏漏,歡迎評論指出