vs開發中總會遇到這樣那樣的問題,這裡把自己知道的及上網查的一些技巧摘錄如下,希望對大家有用,省去大家再去搜尋的煩惱。
1.如何在release狀態下進行除錯
project->setting=>projectsetting對話方塊,選擇release狀態。c/c++標籤中的category選general,optimizations選disable(debug),debut info選program database。在link標籤中選中generate debug info核取方塊。
注:只是乙個介乎debug和release的中間狀態,所有的assert、verify都不起作用,函式呼叫方式已經是真正的呼叫,而不查表,但是這種狀態下quickwatch、呼叫佇列跟蹤功能仍然有效,和debug版一樣。
2. release和debug有什麼不同
release版稱為發行版,debug版稱為除錯版。
debug中可以單步執行、跟蹤等功能,但生成的可執行檔案比較大,**執行速度較慢。release版執行速度較快,可執行檔案較小,但在其編譯條件下無法執行除錯功能。
release的exe檔案鏈結的是標準的mfc dll(use mfc in a shared or static dll)。這些dll在安裝windows的時候,已經配置,所以這些程式能夠在沒有安裝visual c++ 6.0的機器上執行。而debug版本的exe鏈結了除錯版本的mfc dll檔案,在沒有安裝visual c++6.0的機器上不能執行,因為缺相應的dll,除非選擇use static dll when link。
3. assert和verify有什麼區別
assert裡面的內容在release版本中不編譯,verify裡面的內容仍然翻譯,但不再判斷真假。所以後者更安全一點。
例如assert(file.open(strfilename))。
一旦到了release版本中,這一行就忽略了,file根本就不open()了,而且沒有任何出錯的資訊。如果用verify()就不會有這個問題。
4.在編輯狀態下發現成員變數或函式不能顯示提示是如何開啟顯示功能
這似乎是目前這個visual c++ 6.0版本的乙個bug,可按如下步驟使其正常,如再出現,可如法炮製:
(1)關閉project
(2)刪除「工程名.ncb」檔案
(3)重新開啟工程
5. 如何檢測程式中的括號是否匹配
把游標移動到需要檢測的括號前面,按快捷鍵「ctrl + ]」。如果括號匹配正確,游標就跳到匹配的括號處,否則游標不移動,並且機箱喇叭還會發出一聲警告
6. 如何解決visual c++ 6.0不正確連線的問題
情景:明明改動了乙個檔案,卻要把整個專案全部重新編譯鏈結一次。剛剛鏈結好,一執行,又提示重新編譯鏈結一次。
這是因為出現了未來檔案(修改時間和建立時間比系統時間晚)的緣故。可以這樣處理:找到工程資料夾下的debug目錄,將建立和修改時間都比系統時間的檔案全部刪除,然後再從新「rebuild all」一次。
7. 引起lnk2001的常見錯誤都有哪些
遇到的lnk2001錯誤主要為:unresolved external symbol 「symbol」
如果鏈結程式不能在所有的庫和目標檔案內找到所引用的函式、變數或標籤,將產生此錯誤資訊。
一般來說,發生錯誤的原因有兩個:一是所引用的函式、變數不存在,拼寫不正確或者使用錯誤;其次可能使用了不同版本的鏈結庫。以下是可能產生lnk2001錯誤的原因:
<1>由於編碼錯誤導致的lnk2001錯誤
(1)不相匹配的程式**或模組定義(.def)檔案導致lnk2001。例如,如果在c++原始檔了內宣告了一變數「var1」,卻試圖在另乙個檔案內以變數「var1」訪問改變量。
(2)如果使用的內聯函式是在.cpp檔案內定義的,而不是在標頭檔案內定義將導致lnk2001錯誤。
(3)呼叫函式時如果所用的引數型別和頭函式宣告時的型別不符將會產生lnk2001錯誤。
(4)試圖從基類的建構函式或析構函式中呼叫虛函式時將會導致lnk2001錯誤。
(5)要注意函式和變數的可公用性,只有全域性變數、函式是可公用的。靜態函式和靜態變數具有相同的使用範圍限制。當試圖從檔案外部方位任何沒有在該檔案內宣告的靜態變數時將導致編譯錯誤或lnk2001錯誤。
<2>由於編譯和聯機的設定而造成的lnk2001錯誤
(1)如果編譯時使用的是/nod(/noderaultlib)選項,程式所需要的執行庫和mfc時將得到又編譯器寫入目標檔案模組,但除非在檔案中明確包含這些庫名,否則這些庫不會被鏈結進工程檔案。這種情況下使用/nod將導致lnk2001錯誤
(2)如果沒有為wwinmaincrtstartup設定程式入口,在使用unicode和mfc時將出現「unresolved external on _winmain@16」的lnk2001錯誤資訊。
(3)使用/md選項編譯時,既然所有的執行庫都被保留在動態鏈結庫之內,原始檔中對「func」的引用,在目標檔案裡即對「__imp__func」的引用。如果試圖使用靜態庫libc.lib或libcmt.lib進行鏈結,將在__imp__func上發生lnk2001錯誤。如果不使用/md選項編譯,在使用msvcxx.lib鏈結時也會發生lnk2001錯誤。
(4)使用/ml選項編譯時,如用libcmt.lib鏈結會在_errno上發生lnk2001錯誤。
(5)當編譯除錯版的應用程式時,如果採用發行版模態庫進行鏈結也會產生lnk2001錯誤;同樣,使用除錯版模態庫鏈結發行版應用程式時也會產生相同的錯誤。
(6)不同版本的庫和編譯器的混合使用也能產生問題,因為新版的庫里可能包含早先的版本沒有的符號和說明。
(7)在不同的模組中使用內聯和非內聯的編譯選項能夠導致lnk2001錯誤。如果建立c++庫時開啟了函式內聯(/ob1或/ob2),但是在描述該函式的相應標頭檔案裡卻關閉了函式內聯(沒有inline關鍵字),只是將得到錯誤資訊。為避免該問題的發生,應該在相應的標頭檔案中用inline關鍵字標誌為內聯函式。
(8)不正確的/subsystem或entry設定也能導致lnk2001錯誤。
8. visual c++ 6.0工程中的專案檔案都表示什麼
.opt:工程關於開發環境的引數檔案。如工具條位置等資訊。
.clw:classwizard資訊檔案,實際上是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(pre-compiled file):是與編譯檔案,可以加快編譯速度,但是檔案非常大。
.pdb(program database):記錄了程式有關的一些資料和除錯資訊,在除錯的時候可能有用。
.exp:只有在編譯dll的時候才會生成,記錄了dll檔案的一些資訊,一般也沒有用。
.ncb:無編譯瀏覽檔案(no compile browser)。當自動完成功能出問題時可以刪除此檔案。編譯工程後會自動生成。
VS開發工具價格
免費 express版不用錢 在這裡下 也可以用sharpdevelop 在這裡 收費 單獨購買 visual studio 2005 professional edition 6,631.70 visual studio 2005 tools for office 6,631.70 visual ...
Android 開發工具整理
在android開發中,如果使用一些小工具,那麼開發效率將會有很大的提高!今天,就來看看有哪些工具!一.模擬器 1.1 genymotion中文官網 genymotion android模擬器,比原生的模擬器快多了,你值得擁有,不管是eclipse還是android studio,都有genymot...
我的開發工具整理
做個備忘,同時也給大家推薦一下。我基本上採用的是自由軟體或免費軟體。畢竟窮人,窮公司,那些高階玩意用不起。d版不是不能用,但是畢竟心裡不舒服。好歹也是寫程式的啊 編輯器 notepad 當前版本 3.2 超級好用,可以完全代替editplus。只是新版的外掛程式不建議安裝,我發現在開啟一些檔案的時候...