從Visual Studio到Linux上調試C++代碼
04/30/2015
5 分鐘可看完
本文內容
[原文發表時間] 2015/4/29 10:00 PM
正如您可能已經聽說的那樣,Visual Studio 2015新推出了對Android開發的GDB支持。有趣的是,因為這項功能依賴GDB調試,我們完全可能稍加改動就實現針對其他同樣支持GDB的平臺(如Linux和Raspberry Pi)做代碼調試。在這篇博客中我將會分享在Linux,Raspberry Pi上遠程調試C++代碼的步驟。
因為這套方法是我在最初專門為Android設計的實施上修改得來,它有一定的局限性,但是它顯示了這項功能的潛力。這是我們為什么對GDB實施開源的一個很好的例子。還請注意這不是一個交叉編譯方案。您需要在Visual Studio中編輯源碼,再拿到Linux機器去編譯。一旦配置好了之后,您就可以觸發斷點以及逐行調試源代碼,除了對SSH連接做正確的設置以外不需要其他附加工作。
以下是步驟
下載Visual Studio 2015 RC。安裝類型中,選擇自定義安裝,并且選中交叉平臺手機開發下面的Visual C++手機開發。
從Putty下載站點中下載plink,putty,pscp和puttygen。
設置SSH連接到您的Linux安裝使用證書身份驗證。關于此項的一個不錯的概覽是在Azure上鏈接Linux的SSH使用指南。這些指南總體上足夠涵蓋從Windows連接到任何Linux機器,而不僅僅是那些運行Azure的機器。
通過Putty從您的Windows機器連接到Linux機器。系統將提示您的服務器主機密鑰不在注冊表中。選擇yes以將其添加到注冊表以使得主機受信。如果您不這樣做,您將在后面得到一個錯誤提示,但它并不能清晰地指明問題所在。
您需調試的代碼要放在本地機的C++ Makefile 工程項目里。
您將需要創建一個xml配置文件用來指定plink在哪兒,您的連接信息,在遠程機器上的exe文件地址以啟動GDB。以下是一個示例。
PipePath="plink.exe" PipeArguments="-i private.ppk user@server -batch -t gdb --interpreter=mi"
ExePath="/home/user/YourDir/exe" ExeArguments=""
TargetArchitecture="X64" WorkingDirectory="/home/user/YourDir" AdditionalSOLibSearchPath="">
7. 打開命令提示符窗口,在Visual Studio菜單中選擇視圖->其他窗口->命令提示符窗口。
8. 通過以下命令傳遞您的配置文件:
Debug.GDBLaunch /OptionsFile:[path] /Executable:foo
9. 享受在Linux上用VS2015遠程調試您的C++程序吧!
如果您想讓事情更加簡單,在第5步您可以在Makefile項目中指定以下命令為構建命令。
遠程復制您的文件:
pscp.exe -i private.ppk -r YourDir user@server:/home/user
遠程編譯:
plink.exe user@server -i private.ppk "cd ~/YourDir; g++ -g yourcode.cpp -o yourexecutable"
鑒于我上述的僅僅是對未來的預覽,以下是一些已知問題:
在開始以上的第8步后你將遇到一個錯誤信息,“無定義命令gdb”。一旦連接建立,我們的調試引擎試圖開始gdb,但是我們已經通過配置文件參數開始了調試。如果我們不是以這樣的方式開始,就不能正確建立起到GDB的連接,并且將孤立的gdb進程遺留在目的機上。
即使您在上面建立斷點,進入Main函數后的第一個代碼語句總會錯過。
無需輸入可執行文件的執行參數,因為執行參數應該已經包含在選項文件中了,所以即使輸入也不會被使用。
由于不支持交叉編譯您需要把您的工具鏈和gdb安裝在Linux目標機上。
如果您感覺這篇博客很有用或者您在使用中遇到任何問題,請在下面評論讓我們知道。我們也歡迎任何有助于提升的建議。