1、?????????
如何快速地
規(guī)
范代
碼縮進(jìn)
格式
選
中所需要
規(guī)
范的代
碼
,按shift+F8
2、?????????
如何在Release
狀態(tài)
下
進(jìn)
行
調(diào)試
Project->Setting=>ProjectSetting
對(duì)話(huà)
框,
選擇
Release
狀態(tài)
。C/C++
標(biāo)簽
中的Category
選
General,Optimizations
選
Disable(Debug),Debut info
選
Program Database。在Link
標(biāo)簽
中
選
中Generate debug info
復(fù)選
框。
?
注:只是一
個(gè)
介乎Debug合Release的中
間狀態(tài)
,所有的ASSERT、VERIFY都不起作用,函
數(shù)調(diào)
用方式已
經(jīng)
是
真
正的
調(diào)
用,而不
查
表,但是
這種狀態(tài)
下QuickWatch、
調(diào)
用
隊(duì)
列跟蹤功能仍然有效,和Debug版一
樣
。
?
3、?????????
Release和Debug有什
么
不同。
Release版
稱(chēng)為發(fā)
行版,Debug版
稱(chēng)為調(diào)試
版。
Debug中可以
單
步
執(zhí)
行、跟蹤等功能,但生成的可
執(zhí)
行文件比
較
大,代
碼運(yùn)
行速度
較
慢。Release版
運(yùn)
行速度
較
快,可
執(zhí)
行文件
較
小,但在其
編譯條
件小無(wú)法
執(zhí)
行
調(diào)試
功能。
Release的exe文件
鏈
接的是
標(biāo)
準(zhǔn)的MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。
這
些DLL在安裝Windows的
時(shí)
候,已
經(jīng)
配置,所以
這
些程序能
夠
在
沒(méi)
有安裝Visual C++ 6.0的機(jī)器上
運(yùn)
行。而Debug版本的exe
鏈
接了
調(diào)試
版本的MFC DLL文件,如MFC42D.DLL。在
沒(méi)
有安裝Visual C++6.0的機(jī)器上不能
運(yùn)
行,因
為
缺MFC42D.DLL等,除非
選擇
use static dll when link。
?
4、?????????
ASSERT和VERIFY有什
么區(qū)別
ASSERT里面的
內(nèi)
容在Release版本中不
編譯
,VERIFY里面的
內(nèi)
容仍然翻
譯
,但不再判
斷真
假。所以后者更安全一點(diǎn)。
例如ASSERT(file.Open(strFileName))。
一旦到了Release版本中,
這
一行就忽略了,file根本就不Open()了,而且
沒(méi)
有任何出
錯(cuò)
的信息。如果用VERIFY()就不
會(huì)
有
這個(gè)問(wèn)題
。
?
5、?????????
Workspace和Project之
間
是什
么樣
的
關(guān)
系
每
個(gè)
Workspace可以包括幾
個(gè)
project,但只有一
個(gè)處
于Active
狀態(tài)
,各
個(gè)
project之
間
可以有依
賴(lài)關(guān)
系,在project的Setting..中可以
設(shè)
定,比如那
個(gè)
Active
狀態(tài)
的project可以依
賴(lài)
于其他的提供其函
數(shù)調(diào)
用的
靜態(tài)庫(kù)
。
?
6、?????????
如何在非MFC程序中使用ClassWizard
在工程目
錄
下新建一
個(gè)
空的.RC文件,然后加入到工程中就可以了。
?
7、?????????
如何
設(shè)
置
斷
點(diǎn)
按F9在
當(dāng)
前光
標(biāo)處
增加一
個(gè)斷
點(diǎn)和取消一
個(gè)斷
點(diǎn)。
另外,在
編輯狀態(tài)
下,按Ctrl+B
組
合
鍵
,
彈
出
斷
點(diǎn)
設(shè)
置
對(duì)話(huà)
框。然后
單擊
【Condition…】按
鈕彈
出
設(shè)
置
斷
點(diǎn)
條
件的
對(duì)話(huà)
框
進(jìn)
行
設(shè)
置。
?
8、?????????
在
編輯狀態(tài)
下
發(fā)現(xiàn)成員變量或函數(shù)不能顯示提示是如何打開(kāi)顯示功能
這
似乎是目前
這個(gè)
Visual C++ 6.0版本的一
個(gè)
bug,可按如下步
驟
使其正常,如再出
現(xiàn)
,可如法炮制:
(1)????????????
關(guān)閉
Project
(2)????????????
刪
除“工程名.ncb”文件
(3)????????????
重新打
開(kāi)
工程
?
9、?????????
如何
將
一
個(gè)
通
過(guò)
ClassWizard生成的
類(lèi)徹
底
刪
除
首先在工作
區(qū)
的FileView中
選
中
該類(lèi)
的.h和.cpp文件,按delete
刪
除,然后在文件管理器中
將這兩個(gè)
文件
刪
除,再
運(yùn)
行ClassWizard,
這時(shí)
出
現(xiàn)
是否移走
該類(lèi)
的提示,
選擇
remove就可以了。
?
10、????
如何
將
再workspace中消失的
類(lèi)
找出
來(lái)
打
開(kāi)該類(lèi)對(duì)應(yīng)
的
頭
文件,然后
將
其
類(lèi)
名
隨
便改一下,
這個(gè)時(shí)
候工作
區(qū)
就
會(huì)
出
現(xiàn)
新的
類(lèi)
,再
將這個(gè)類(lèi)
改回原
來(lái)
的名字就可以了。
?
11、????
如何
清
楚所有的
斷
點(diǎn)
菜
單
【Edit】->【Breakpoints…】,打
開(kāi)
“Breakpoints”
對(duì)話(huà)
框,
單擊
【Remove All】按
鈕
即可。
快捷
鍵
是“Ctrl + Shift + F8”。
?
12、????
如何再ClassWizard中
選擇
未列出的信息
打
開(kāi)
“ClassWizard”
對(duì)話(huà)
框,然后切
換
到“Class Info”
頁(yè)
面。改
變
“Message filter”,如
選擇
“Window”,“Message”
頁(yè)
面就
會(huì)
出
現(xiàn)
Window的信息。
?
13、????
如何
檢測(cè)
程序中的括
號(hào)
是否匹配
把光
標(biāo)
移
動(dòng)
到需要
檢測(cè)
的括
號(hào)
前面,按快捷
鍵
“Ctrl + ]”。如果括
號(hào)
匹配正確,光
標(biāo)
就跳到匹配的括
號(hào)處
,否
則
光
標(biāo)
不移
動(dòng)
,
并
且機(jī)箱喇叭
還會(huì)發(fā)
出一
聲
警告。
?
14、????
如何
查
看一
個(gè)
宏(或
變
量、函
數(shù)
)的定
義
把光
標(biāo)
移
動(dòng)
到要
查
看的一
個(gè)
宏上,就比如
說(shuō)
最常
見(jiàn)
的DECLARE_MAP_MESSAGE上按一下F12(或右
鍵
菜
單
中的相
關(guān)
菜
單
),如果
沒(méi)
有建立
瀏覽
文件,就
會(huì)
出
現(xiàn)
提示
對(duì)話(huà)
框,按【確定】按
鈕
,然后就
會(huì)
跳到
該
宏(或
變
量、函
數(shù)
)定
義
的地方。
?
15、????
如何添加
Lib
文件到當(dāng)前工程
單擊菜單【
Project
】-
>
【
Settings…
】彈出“
Project Setting
”對(duì)話(huà)框,切換到“
Link
”標(biāo)簽頁(yè),在“
Object/library modules
”處輸入
Lib
文件名稱(chēng),不同的
Lib
之間用空格格開(kāi)。
?
16、????
如何快速刪除項(xiàng)目下的
Debug
文件夾中臨時(shí)文件
在工作區(qū)的
FileView
視圖中選中對(duì)應(yīng)的項(xiàng)目,單擊右鍵彈出菜單,選擇【
Clean(selection only)
】菜單即可。
?
17、????
如何快速生成一個(gè)現(xiàn)有工程除了工程名外完全相同的新工程。
在新建工程的“
New
”對(duì)話(huà)框中選擇“
Custom Appwizard
”項(xiàng),輸入新工程的名字,單擊【
OK
】按鈕。出現(xiàn)“
Custom AppWizard
”項(xiàng),輸入新工程的名字,單擊【
OK
】按鈕。出現(xiàn)“
Custom AppWizard
-
Step 1 of 2
”對(duì)話(huà)框,選擇“
An existing Project
”項(xiàng),單擊【
Next
】按鈕。出現(xiàn)“
Custom AppWizard
-
Step 2 of 2
”對(duì)話(huà)框,選擇現(xiàn)有工程的工程文件名,最后單擊【
Finish
】按鈕。編譯后就生成一個(gè)與現(xiàn)有工程相同但可以重新取名的工程
AppWizard
。
現(xiàn)在就可以項(xiàng)用
MFC AppWizard
一樣用這個(gè)定制的向?qū)АH绻幌胗昧耍梢栽?/span>
Visual C++ 6.0
安裝目錄下
Common
\
MSDev98
\
Template
目錄中刪除該
Wizard
對(duì)應(yīng)的
.awx
和
.pdb
文件。
?
18、????
如何解決
Visual C++ 6.0
不正確連接的問(wèn)題
情景:明明之間改動(dòng)了一個(gè)文件,卻要把整個(gè)項(xiàng)目全部重新編譯鏈接一次。剛剛鏈接好,一運(yùn)行,有提示重新編譯鏈接一次。
這是因?yàn)槌霈F(xiàn)了未來(lái)文件
(
修改時(shí)間和創(chuàng)建時(shí)間比系統(tǒng)時(shí)間晚
)
的緣故。可以這樣處理:找到工程文件夾下的
debug
目錄,將創(chuàng)建和修改時(shí)間都比系統(tǒng)時(shí)間的文件全部刪除,然后再?gòu)男隆?/span>
Rebuild All
”一次。
?
19、????
引起
LNK2001
的常見(jiàn)錯(cuò)誤都有哪些
遇到的
LNK2001
錯(cuò)誤主要為:
unresolved external symbol “symbol”
如果鏈接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所引用的函數(shù)、變量或標(biāo)簽,將產(chǎn)生此錯(cuò)誤信息。
一般來(lái)說(shuō),發(fā)生錯(cuò)誤的原因有兩個(gè):一時(shí)所引用的函數(shù)、變量不存在,拼寫(xiě)不正確或者使用錯(cuò)誤;其次可能使用了不同版本的鏈接庫(kù)。一下是可能產(chǎn)生
LNK2001
錯(cuò)誤的原因:
<1>
由于編碼錯(cuò)誤導(dǎo)致的
LNK2001
錯(cuò)誤
(1)????????????
不相匹配的程序代碼或模塊定義
(.DEF)
文件導(dǎo)致
LNK2001
。例如,如果在
C++
源文件了內(nèi)聲明了一變量“
var1
”,卻視圖在另一個(gè)文件內(nèi)以變量“
var1
”訪問(wèn)改變量。
(2)????????????
如果使用的內(nèi)聯(lián)函數(shù)是在
.cpp
文件內(nèi)定義的,而不是在頭文件內(nèi)定義將導(dǎo)致
LNK2001
錯(cuò)誤。
(3)????????????
調(diào)用函數(shù)是如果所用的參數(shù)類(lèi)型頭函數(shù)聲明是的類(lèi)型不符將會(huì)產(chǎn)生
LNK2001
錯(cuò)誤。
(4)????????????
視圖從基類(lèi)的構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛擬函數(shù)時(shí)將會(huì)導(dǎo)致
LNK2001
錯(cuò)誤。
(5)????????????
要注意函數(shù)和變量的可公用性,只有全局變量、函數(shù)時(shí)可公用的。靜態(tài)函數(shù)和靜態(tài)變量具有相同的使用范圍限制。當(dāng)試圖從文件外部方位任何沒(méi)有在該文件內(nèi)聲明的靜態(tài)變量時(shí)將導(dǎo)致編譯錯(cuò)誤或
LNK2001
錯(cuò)誤。
<2>
由于編譯和聯(lián)機(jī)的設(shè)置而造成的
LNK2001
錯(cuò)誤
(1)????????????
如果編譯時(shí)使用的時(shí)
/NOD(/NODERAULTLIB)
選項(xiàng),程序所需要的運(yùn)行庫(kù)和
MFC
時(shí)將得到又編譯器寫(xiě)入目標(biāo)文件模塊,但除非在文件中明確包含這些庫(kù)名,否則這些庫(kù)不會(huì)北鏈接進(jìn)工程文件。這種情況下使用
/NOD
將導(dǎo)致
LNK2001
錯(cuò)誤
(2)????????????
如果沒(méi)有為
wWinMainCRTStartup
設(shè)定程序入口,在使用
Unicode
和
MFC
時(shí)講的到“
unresolved external on _WinMain@16
”的
LNK2001
錯(cuò)誤信息。
(3)????????????
使用
/MD
選項(xiàng)編譯時(shí),既然所有的運(yùn)行庫(kù)都被保留在動(dòng)態(tài)鏈接庫(kù)之內(nèi),源文件中對(duì)“
func”
的引用,在目標(biāo)文件里即對(duì)“
__imp__func
”的引用。如果試圖使用靜態(tài)庫(kù)
LIBC.LIB
或
LIBCMT.LIB
進(jìn)行鏈接,將在
__imp__func
上發(fā)生
LNK2001
錯(cuò)誤。如果不使用
/MD
選項(xiàng)編譯,在使用
MSVCxx.LIB
鏈接時(shí)也會(huì)發(fā)生
LNK2001
錯(cuò)誤。
(4)????????????
使用
/ML
選項(xiàng)編譯時(shí),如用
LIBCMT.LIB
鏈接回在
_errno
上發(fā)生
LNK2001
錯(cuò)誤。
(5)????????????
當(dāng)編譯調(diào)試版的應(yīng)用程序時(shí),如果采用發(fā)行版模態(tài)庫(kù)進(jìn)行鏈接也會(huì)產(chǎn)生
LNK2001
錯(cuò)誤;同樣,使用調(diào)試版模態(tài)庫(kù)鏈接發(fā)行版應(yīng)用程序時(shí)也會(huì)產(chǎn)生相同的錯(cuò)誤。
(6)????????????
不同版本的庫(kù)和編譯器的混合使用也能產(chǎn)生問(wèn)題,因?yàn)樾掳娴膸?kù)里可能包含早先的版本沒(méi)有的符號(hào)和說(shuō)明。
(7)????????????
在不同的模塊中使用內(nèi)聯(lián)和非內(nèi)聯(lián)的編譯選項(xiàng)能夠?qū)е?/span>
LNK2001
錯(cuò)誤。如果創(chuàng)建
C++
庫(kù)時(shí)打開(kāi)了函數(shù)內(nèi)聯(lián)
(/Ob1
或
/Ob2)
,但是在描述該函數(shù)的相應(yīng)頭問(wèn)卷安里卻關(guān)閉了函數(shù)內(nèi)聯(lián)
(
沒(méi)有
inline
關(guān)鍵字
)
,只是將得到錯(cuò)誤信息。為避免該問(wèn)題的發(fā)生,應(yīng)該在相應(yīng)的頭文件中用
inline
關(guān)鍵字標(biāo)志為內(nèi)聯(lián)函數(shù)。
(8)????????????
不正確的
/SUBSYSTEM
或
ENTRY
設(shè)置也能導(dǎo)致
LNK2001
錯(cuò)誤。
?
20、????
如何調(diào)試一個(gè)沒(méi)有源碼的
exe
文件調(diào)用的
dll
在
Visual C++ 6.0
中,進(jìn)入“
Project Setting
”對(duì)話(huà)框然后選擇
Debug
標(biāo)簽頁(yè)。通常
Visual Studio
默認(rèn)“
executable for debug session
”為可執(zhí)行文件名,但可以將他改成任何你想要的程序。甚至可以指定不同的工作目錄以及傳遞參數(shù)到你的程序。這個(gè)技術(shù)常用來(lái)調(diào)試
Dlls
、名字空間擴(kuò)展、
COM
對(duì)象和其他從某些
EXE
以及從第三方的
EXE
中調(diào)用的
plug-in
程序。
?
21、????
Visual C++ 6.0
工程中的項(xiàng)目文件都表示什么。
.opt
:工程關(guān)于開(kāi)發(fā)化境的參數(shù)文件。如工具條位置等信息。
.aps(AppStudio File)
資源輔助文件,二進(jìn)制格式,一般不用去管他。
.clw
:
ClassWizard
信息文件,實(shí)際上是
INI
文件格式,又興趣可以研究一下。有時(shí)候
ClassWizard
出了問(wèn)題,手工修改
CLW
文件可以解決。如果此文件不存在的話(huà),每次用
ClassWizard
的時(shí)候回提示是否重建。
.dsp(DevelopStudio Project)
:項(xiàng)目文件,文本格式,不過(guò)不熟悉的或不要手工修改。
.dsw(DevelopStudio Workspace)
:是工作區(qū)文件,其他特點(diǎn)和
.dsp
差不多。
.plg
:是編譯信息文件,編譯時(shí)的
error
和
warning
信息文件
(
實(shí)際上時(shí)一個(gè)
html
文件
)
,一般用處不大。在單擊菜單【
Tool
】-
>
【
Option
】彈出的對(duì)話(huà)框里面有個(gè)選項(xiàng)可以控制這個(gè)文件的生成。
.hpj(Help Project)
:是生成幫助文件的工程,用
microsoft Help Compiler
可以處理。
.mdp(Microsoft DevStudio Project)
:是舊版本的項(xiàng)目文件,如果要打開(kāi)此文件的話(huà),回提示你是否轉(zhuǎn)換成新的
.dsp
格式。
.bsc
:是用于瀏覽項(xiàng)目信息的,如果用
Source Brower
的話(huà)舊必須又這個(gè)文件。如果不用這個(gè)功能的話(huà),可以在
Project Options
里面去掉
Generate Browse Info File
,這樣可以加快編譯速度。
.map
是執(zhí)行文件的影像信息記錄文件,除非對(duì)系統(tǒng)底層,這個(gè)文件一般用不著。
.pch(Pre-Compiled File)
:是與編譯文件,可以加快編譯速度,但是文件非常大。
.pdb(Program Database),
記錄了程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息,在調(diào)試的時(shí)候可能有用。
.exp
:只有在編譯
DLL
的時(shí)候才會(huì)生成,記錄了
DLL
文件的一些信息,一般也沒(méi)有用。
.ncb
:無(wú)編譯瀏覽文件
(no compile browser)
。當(dāng)自動(dòng)完成功能出問(wèn)題時(shí)可以刪除此文件。編譯工程后回自動(dòng)生成。
posted on 2007-02-23 15:13
jay 閱讀(611)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
VC