VC遠端除錯相關的幾篇文章

2021-05-22 21:10:51 字數 3145 閱讀 1538

***8學院

vc教程 發布日期:2023年04月17日

vc開發環境之所以提供遠端除錯的能力,是因為有些情況下單機除錯會讓你崩潰掉……比如,除錯gui程式的wm_paint訊息,因為要單步除錯,所以偵錯程式會對介面的重繪產生***(heisenberg不確定性原理)。當然還有些別的情況也適用,比如程式在測試環境執行的好好的,但是在客戶那行為總是異常,這時候如果可以tcp遠端連線上去維護的話,就能通過遠端除錯的特性在出現狀況的系統環境中排錯~

下面來說一下具體的做法。先明確下概念,遠端除錯嘛,自然是兩個機器之間除錯。程式執行在目標機器上,偵錯程式執行在本機。當然,目標機器上還是要有少許輔助程式才能跟本機的偵錯程式connect上,以便通訊。一般來說,只需要copy四個檔案到目標機器上就行了:msvcmon.exe、dm.dll、tln0t.dll和msdis110.dll.這四個檔案都能在vc6目錄的commonmsdev98bin目錄下面找到。

有個settings的按鈕,不用管。直接點connect就行了~

接著看看本機這邊偵錯程式的設定。首先設定好遠端除錯開關,在build選單下有個debuger remote connecting的子選單,點之。出現個視窗,預設是在local項,我們要選的是network(tcp/ip),然後點設定。會彈出乙個對話方塊,輸入目標機器的ip或者機器名,最後點ok就行了。

接下來把工程開啟,設定最後一步。假設生成的可執行程式名為remotedebug.exe,在目標機器上的路徑為d:prjremote.exe,那麼,在本機的project settings裡面,選擇debug頁面的remote executable path and file name下面的編輯框中輸入目標機器中程式的路徑:d:prjremotedebug.exe.注意,這裡寫的是從目標機器的角度所看到的路徑。

然後編譯一下程式,把新編譯出來的remotedebug.exe複製到目標機器的d:prj下面,就可以在本機像平常一樣除錯了。

要注意的事項:

1.要求本機與目標機器上的版本要完全一樣才行。

2.在本機設定遠端除錯路徑時一定要填目標機器上看到的路徑,而不是本機看到的網路路徑

3.除錯開始時,會提示些符號資訊的東東,都確定就行了

4.遠端除錯的設定是全域性設定,跟專案無關。實際上,上面提到本機偵錯程式設定時都沒開啟工程。所以,當不需要遠端除錯時,要從build選單下面的debuger remote connecting的子選單設定回local模式。否則每次都會問你要遠端的資訊.

*遠端機為除錯機分配許可權,使除錯機可以使用遠端桌面登陸到遠端機器上(這樣除錯起來方便)。

*除錯機上安裝visual studio .net 2003

共享除錯機上的visual studio上的遠端除錯目錄(以機器為例)

c:/program files/microsoft visual studio .net 2003/common7/packages/debugger

*遠端機將上面的共享目錄考貝到本地,比如:d://debugger

*除錯機共享要除錯的程式所在目錄,比如:d:/important/cvsroot/dv-to-***/bin/debug

*遠端機將除錯機上的目錄像射為本地目錄。比如:z://

*遠端機上以命令列形式執行 d://debugger/msvcmon.exe –tcpip –anyuser

*除錯機啟動vc. 開啟要除錯的工程。比如dvto***. 選擇選單project->properties

選debuging->remote setting

connection :remote via tcp/ip (native only)

remote machine: 192.168.0.161

remote command: z:/dvto***.exe

*debug->start

*就可以除錯了。

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。

這裡針對的是vc6版本:

1  自己用的計算機叫「本地機」,要除錯程式在遠方計算機上,叫「遠端機」;雙方要設好ip位址,用ping都能看到對方;

2  「遠端機」上建立乙個共享可讀可寫的目錄,將「本地機」上可執行程式拷貝至「遠端機」;例如:「本地機」可以看到「遠端機」的目錄為://yuancheng/debug/test.exe

3  在「遠端機」上執行 msvcmon.exe程式,設定ip是對方的,即「本地機"的ip號;啟動它,出現乙個disconnect......對話方塊,等會直到「本地機」除錯程式時,它消失;

4  "本地機"上執行vc,設定 組建-->遠端鏈結除錯程式-->使用tcp/ip,設定對方的ip號,即「遠端機」的;

5。「本地機」的vc工程-->設定-->除錯-->常規 中可執行除錯對話方塊 及遠端可除錯路徑及檔名均設定為://yuancheng/debug/test.exe;

6.好了,可以在「本地機」上按常規方式除錯程式了,

注意:不要使用對映網路驅動器方式,我至少沒有成功,另外「本地機」的輸出目錄若不是到「遠端機」上,那麼每次重新編譯執行,需要將新生產的檔案拷貝至「遠端機」的相應目錄上。

Windows Phone開發的十幾篇文章(待續)

windows phone開發 1 概論 windows phone開發 2 豎立自信,初試鋒茫 windows phone開發 3 棋子未動,先觀全域性 windows phone開發 4 框架和頁 windows phone開發 5 室內裝修 windows phone開發 6 處理螢幕方向的改...

Windows Phone開發的十幾篇文章(待續)

qianqianlianmeng windows phone開發 1 概論 windows phone開發 2 豎立自信,初試鋒茫 windows phone開發 3 棋子未動,先觀全域性 windows phone開發 4 框架和頁 windows phone開發 5 室內裝修 windows p...

最近在InfoQ上翻譯的幾篇文章

社群 net 主題 net框架,silverlight 使用過asp.net的開發者都知道,fileupload控制項是一把雙刃劍 既可能成為我們的救世主,也能變成我們的敵人。其中乙個很常見的問題就是如何處理超過4mb的大檔案上傳。社群 net 主題 程式設計c 中的匿名型別非常簡單,因為這些匿名型...