PA環境記錄
阿新 • • 發佈:2020-11-27
實驗環境
-
虛擬機器 / 雲伺服器
-
vscode remote-ssh
相關資源:
程式碼倉庫:參考http://archeng.top/pa/0.6.html
實驗文件: 參考http://archeng.top/pa
完成後的除錯環境大概這樣,和除錯本地檔案的步驟和方法基本一致
大概有以下步驟
-
安裝虛擬機器環境/雲伺服器,centos7或者其他均可
-
虛擬機器上安裝好ssh,安裝方式自己搜,安裝相關工具鏈,包括gdb/cgdb,gcc,make~
-
本地vscode安裝好remote ssh 外掛,連上虛擬機器,在本地vscode能寫程式 算成功
除錯環境
除錯方式可以有這兩種
-
cgdb / gdb中除錯(有門檻)
-
Vscode 介面除錯(推薦)
主要記錄一下vscode的配置方式
-
按照實驗文件完成首次編譯和執行,中間可能會對makefile做一定修改,問題太雜不記錄
-
在完成首次執行以後可以配置以下的配置檔案
-
在專案根目錄下建立 .vscode資料夾,資料夾下包括以下兩個檔案
tasks.json
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "make nemu", "type": "shell", "command": "cd nemu && make app", } ] }
lanuch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "gcc - 生成和除錯活動檔案", "type": "cppdbg", "request": "launch", "program": "/home/zhuzhicheng/project/PA/ics2019/nemu/build/mips32-nemu", "args": [ "-l","/home/zhuzhicheng/project/PA/ics2019/nemu/build/nemu-log.txt", "-d","/home/zhuzhicheng/project/PA/ics2019/nemu/tools/qemu-diff/build/mips32-qemu-so"], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "為 gdb 啟用整齊列印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "make nemu", "miDebuggerPath": "/usr/bin/gdb" } ] }
launch.json中 program 和 args 項 的目錄 /home/zhuzhicheng/project/PA/ 需要替換成自己的程式碼倉庫目錄
-l 引數 後跟的是日誌路徑
-d 引數 後跟的是nemu執行時載入程式的路徑
這裡的引數 和 makefile 中 make run 引數 保持一致即可
-
-
後續即可開啟正常除錯
可能碰到的一些問題:
- 初始化相關環境變數,根目錄init.sh中註釋掉第十行return,第13-15行 ,後執行 bash init.sh ,如果使用的不是預設shell,需要更改20-21 行
- 設定$ISA環境變數
- nemu/makefile 中
- 第33行:FLAGS += -O0 -g -MMD -Wall -ggdb3 -std=c99 $(INCLUDES) -D__ISA__=$(ISA) -fomit-frame-pointer # -mmanual-endbr -fcf-protection=none #-Werror 禁止編譯器優化,除錯時使用
- 第71行:@$(LD) -O0 -rdynamic $(SO_LDLAGS) -o $@ $^ -lSDL2 -lreadline -ldl
- 註釋掉第25行關閉自動新增commit歷史
- ···