熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Visual C++開發工具與調試技巧整理[2]

2022-06-13   來源: .NET編程 

  如何添加Lib文件到當前工程

  單擊菜單【Project】->【Settings…】彈出Project Setting對話框切換到Link標簽頁Object/library modules處輸入Lib文件名稱不同的Lib之間用空格格開

  如何快速刪除項目下的Debug文件夾中臨時文件

  在工作區的FileView視圖中選中對應的項目單擊右鍵彈出菜單選擇【Clean(selection only)】菜單即可

  如何快速生成一個現有工程除了工程名外完全相同的新工程

  在新建工程的New對話框中選擇Custom Appwizard輸入新工程的名字單擊【OK】按鈕出現Custom AppWizard輸入新工程的名字單擊【OK】按鈕出現Custom AppWizard-Step of 對話框選擇An existing Project單擊【Next】按鈕出現Custom AppWizard-Step of 對話框選擇現有工程的工程文件名最後單擊【Finish】按鈕編譯後就生成一個與現有工程相同但可以重新取名的工程AppWizard

  現在就可以項用MFC AppWizard一樣用這個定制的向導如果不想用了可以在Visual C++ 安裝目錄下Common\MSDev\Template目錄中刪除該Wizard對應的awx和pdb文件

  如何解決Visual C++ 不正確連接的問題

  情景明明改動了一個文件卻要把整個項目全部重新編譯鏈接一次剛剛鏈接好一運行又提示重新編譯鏈接一次

  這是因為出現了未來文件(修改時間和創建時間比系統時間晚)的緣故可以這樣處理找到工程文件夾下的debug目錄將創建和修改時間都比系統時間的文件全部刪除然後再從新Rebuild All一次

  引起LNK的常見錯誤都有哪些

  遇到的LNK錯誤主要為unresolved external symbol symbol

  如果鏈接程序不能在所有的庫和目標文件內找到所引用的函數變量或標簽將產生此錯誤信息

  一般來說發生錯誤的原因有兩個一是所引用的函數變量不存在拼寫不正確或者使用錯誤其次可能使用了不同版本的鏈接庫以下是可能產生LNK錯誤的原因

  <>由於編碼錯誤導致的LNK錯誤

  ()不相匹配的程序代碼或模塊定義(DEF)文件導致LNK例如如果在C++源文件了內聲明了一變量var卻試圖在另一個文件內以變量var訪問改變量

  ()如果使用的內聯函數是在cpp文件內定義的而不是在頭文件內定義將導致LNK錯誤

  ()調用函數時如果所用的參數類型和頭函數聲明時的類型不符將會產生LNK錯誤

  ()試圖從基類的構造函數或析構函數中調用虛擬函數時將會導致LNK錯誤

  ()要注意函數和變量的可公用性只有全局變量函數是可公用的靜態函數和靜態變量具有相同的使用范圍限制當試圖從文件外部方位任何沒有在該文件內聲明的靜態變量時將導致編譯錯誤或LNK錯誤

  <>由於編譯和聯機的設置而造成的LNK錯誤

  ()如果編譯時使用的是/NOD(/NODERAULTLIB)選項程序所需要的運行庫和MFC時將得到又編譯器寫入目標文件模塊但除非在文件中明確包含這些庫名否則這些庫不會被鏈接進工程文件這種情況下使用/NOD將導致LNK錯誤

  ()如果沒有為wWinMainCRTStartup設定程序入口在使用Unicode和MFC時將出現unresolved external on _WinMain@的LNK錯誤信息

  ()使用/MD選項編譯時既然所有的運行庫都被保留在動態鏈接庫之內源文件中對func的引用在目標文件裡即對__imp__func的引用如果試圖使用靜態庫LIBCLIB或LIBCMTLIB進行鏈接將在__imp__func上發生LNK錯誤如果不使用/MD選項編譯在使用MSVCxxLIB鏈接時也會發生LNK錯誤

  ()使用/ML選項編譯時如用LIBCMTLIB鏈接會在_errno上發生LNK錯誤

  ()當編譯調試版的應用程序時如果采用發行版模態庫進行鏈接也會產生LNK錯誤同樣使用調試版模態庫鏈接發行版應用程序時也會產生相同的錯誤

  ()不同版本的庫和編譯器的混合使用也能產生問題因為新版的庫裡可能包含早先的版本沒有的符號和說明

  ()在不同的模塊中使用內聯和非內聯的編譯選項能夠導致LNK錯誤如果創建C++庫時打開了函數內聯(/Ob或/Ob)但是在描述該函數的相應頭文件裡卻關閉了函數內聯(沒有inline關鍵字)只是將得到錯誤信息為避免該問題的發生應該在相應的頭文件中用inline關鍵字標志為內聯函數

  ()不正確的/SUBSYSTEM或ENTRY設置也能導致LNK錯誤

  如何調試一個沒有源碼的exe文件調用的dll

  在Visual C++ 進入Project Setting對話框然後選擇Debug標簽頁通常Visual Studio默認executable for debug session為可執行文件名但可以將他改成任何你想要的程序甚至可以指定不同的工作目錄以及傳遞參數到你的程序這個技術常用來調試Dlls名字空間擴展COM對象和其他從某些EXE以及從第三方的EXE中調用的plugin程序

  Visual C++ 工程中的項目文件都表示什麼

  opt工程關於開發環境的參數文件如工具條位置等信息

  aps(AppStudio File)資源輔助文件二進制格式一般不用去管它

  clwClassWizard信息文件實際上是INI文件格式有興趣可以研究一下有時候ClassWizard出了問題手工修改CLW文件可以解決如果此文件不存在的話每次用ClassWizard的時候回提示是否重建

  dsp(DevelopStudio Project)項目文件文本格式不過不熟悉的不要手工修改

  dsw(DevelopStudio Workspace)是工作區文件其他特點和dsp差不多

  plg是編譯信息文件編譯時的error和warning信息文件(實際上是一個html文件)一般用處不大在單擊菜單【Tool】->【Option】彈出的對話框裡面有個選項可以控制這個文件的生成

  hpj(Help Project)是生成幫助文件的工程用microsoft Help Compiler可以處理

  mdp(Microsoft DevStudio Project)是舊版本的項目文件如果要打開此文件的話會提示你是否轉換成新的dsp格式

  bsc是用於浏覽項目信息的如果用Source Brower的話就必須有這個文件如果不用這個功能的話可以在Project Options裡面去掉Generate Browse Info File這樣可以加快編譯速度

  map是執行文件的映象信息記錄文件除非對系統底層這個文件一般用不著

  pch(PreCompiled File)是與編譯文件可以加快編譯速度但是文件非常大

  pdb(Program Database)記錄了程序有關的一些數據和調試信息在調試的時候可能有用

  exp只有在編譯DLL的時候才會生成記錄了DLL文件的一些信息一般也沒有用

  ncb無編譯浏覽文件(no compile browser)當自動完成功能出問題時可以刪除此文件編譯工程後會自動生成

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15642.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.