Posted on 2011-05-24 15:23
亂78糟 閱讀(5556)
評論(0) 編輯 收藏 引用 所屬分類:
重要資料
怎么說呢,介紹遠程調試的文章網絡上其實有不少,我這里也會涉及到,但會更加的詳細和細致,比如win7(32、64)系統下的調試,家庭版的調試,以及一些常見問題的原因和解決辦法。
一般我們都會這么操作,比如在VISTA之前的系統如,2K, XP, 2003下(這里都是32位):
(1) 遠程端:安裝VS2005光盤"\vs\Remote Debugger\x86\rdbgsetup.exe"。或者直接運行或copy本地端的: "Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86"
(2) 遠程端:“本地安全策略 - 安全選項 - 網絡訪問:本地帳戶的共享和安全模式”改為:經典-本地用戶以自己的身份驗證。
(3) 遠程端:啟動Remote Debuger,從“工具 - 選項”中將身份驗證模式改為“無身份驗證,允許任何用戶進行調試”。
或者直接用命令行:"\ msvsmon.exe" /noauth /anyuser /nosecuritywarn,可以建個快捷方式以方便運行。
(4) 將需要調試的程序debug版本和相應的pdb文件(包含調試信息)拷貝到遠程主機,啟動該debug版本程序。
(5) 本地:在VS2005中,“工具”--“附加到進程”,傳輸選“遠程”,限定符輸入遠程端的主機名或IP地址,回車,選擇我們需要調試的應用程序。如果一切正常,那么我們現在可以像調試本機程序一樣調試遠程主機上運行的debug版本了。
細節和常見問題:
(1)如果是64位系統,請選擇x64,即\vs\Remote Debugger\x64\rdbgsetup.exe;
(2)不要因為遠程主機是64位的,就使用64位的remote debugger,它必須和你的應用程序匹配,即統一為32位,或64位。
(3)如果是家庭版,控制面板管理工具里是沒有“本地安裝策略”這個工具的,那么只能通過修改注冊表來實現,注冊表項:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa], 找到“forceguest”,如果它的值為1,即dword:00000001,表示“僅來賓 - 對本地用戶進行身份驗證,其身份為來賓”(這個描述win7和之前的系統稍有不同),如果值為0,即dword:00000000,表示“經典 - 對本地用戶進行身份驗證,不改變其本來身份”。我們需要的值為0。
(4)win7/vista下遠程連接到目標主機,已經成功顯示了進程列表,但是attach待調試程序時候本地出現提示“Unable to attach the process - 系統找不到指定的文件 ”,這是因為remote debugger權限不足導致,以管理員權限重新啟動remote debugger解決該問題。
(5)成功attach到遠程主機目標程序,但是本地無法下斷點,或者斷點下了之后處于不可被觸發狀態。解決辦法:rebuild整個工程,然后將重新編譯的程序和pdb文件覆蓋遠程主機相應文件(這個和本地調試完全一樣是不:P)。
(6)debug版本的程序拷到遠程主機之后,無法運行,那好因為缺少相應的debug版本動態庫和相關版本配置文件(可以用VS附帶工具Depends查看)。以MFC程序為例,需要如下操作:
1)將VS目錄下Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86下的三個目錄相應的動態庫拷貝到遠程主機應用程序根目錄下或者c:\windows\system32\目錄下。
2)在c:\windows\winsxs\目錄下找到編譯主機vs2005版本匹配的目錄:Microsoft.VC80.DebugCRT、Microsoft.VC80.DebugMFC,將他們拷貝到目標主機c:\windows\winsxs目錄下。在將本地winsxs\Manifests\目錄下的幾個相應文件拷貝到目標主機這個目錄下。最后將本機winsxs\Policies\目錄下的相應子文件拷貝到相同目錄下。這個鏈接說的更加的詳細:http://wenwen.soso.com/z/q165079372.htm
注意:win7/vsita下winsxs是沒有權限往里面寫東西的,所以要更改權限,這個可以網上搜索,我就不詳述了。
現在已經可以正常運行debug版本的程序了,即便該主機沒有開發環境:)。
PS: 一直不會用CPP BLOG的編輯器,真是煩惱- -!