評估您的C編程技能
該實驗室將為您提供編程風格的練習,您需要能夠熟練地進行,尤其是對於課堂上的以後作業。涵蓋的材料都應為您審核。測試的一些技能是:
該實驗室涉及實施隊列,支持最後的,第一(LIFO)和第一(FIFO)排隊學科。基礎數據結構是圓形雙關聯列表,增強了一些操作,使某些操作更有效。
在您的機器上必須安裝一些先決條件,然後才能構建和運行自動車手。
以下命令將在Ubuntu Linux 20.04或更高版本上安裝所有必需和可選依賴項:
$ sudo apt install build-essential git clang-format cppcheck aspell colordiff valgrind
像Arch Linux這樣的一些發行版不會與aspell
安裝aspell-en
,您必須明確安裝它:
$ sudo pacman -S aspell-en
注意:CPPCHECK版本必須至少為1.90,否則可能會以誤報報告錯誤。您可以通過執行$ cppcheck --version
獲得其版本。檢查開發人員信息以從源頭構建cpheck。
clang-format
整合到vim
如果您想在使用VIM保存後自動運行clang-format
,則根據Clang文檔,Clang-Format支持VIM的集成。
通過將以下添加到$HOME/.vimrc
中
function ! Formatonsave ()
let l:formatdiff = 1
py3f < path-to-clang-format.py > /clang-format.py
endfunction
autocmd BufWritePre * .h, * .hpp, * .c, * .cc, * .cpp call Formatonsave ()
然後,它在編碼工作流程中具有零繪製的集成,因為它可以在保存文件時處理格式化更改。注意:在Ubuntu Linux 18.04上,通往clang-format.py
的路徑是/usr/share/vim/addons/syntax/
。
在運行自動載體之前,請編譯您的代碼以創建測試程序qtest
$ make
檢查您的代碼的正確性,即自動化器:
$ make test
檢查qtest
的示例用法:
$ make check
有關命令調用的每個步驟將相應地顯示。
檢查您的代碼的內存問題:
$ make valgrind
./.valgrindrc
以自定義Valgrind的參數$ make clean
或$ rm /tmp/qtest.*
清潔目標valgrind創建的臨時文件可以通過以下方式識別額外的選項:
VERBOSE
:控制構建的冗長。如果VERBOSE=1
,則在構建過程中回應每個命令。SANITIZER
:啟用消毒劑(S)定向構建。目前,支持adversSanitizer。 qtest
qtest
提供了一個可以創建和操縱隊列的命令解釋器。
運行$ ./qtest -h
以查看命令行選項列表
當您執行$ ./qtest
時,它將給出命令提示符cmd>
。類型help
查看可用命令的列表。
您將交出這兩個文件
queue.h
:聲明的修改版本,包括您要介紹的新字段queue.c
:修改版本的隊列代碼以修復原始代碼的缺陷評估隊列代碼的工具
Makefile
:構建評估程序qtest
README.md
:此文件scripts/driver.py
qtest
。scripts/debug.py
的輔助程序,無需sigalrm和/或分析生成的核心轉儲qtest
。助手文件
console.{c,h}
:實現QTest的命令行解釋器report.{c,h}
:在不同級別的冗長級別上實現信息打印harness.{c,h}
:Malloc/free/strdup的自定義版本可提供嚴格的測試框架qtest.c
: qtest
代碼跟踪文件
traces/trace-XX-CAT.cmd
:驅動程序使用的跟踪文件。這些是qtest
的輸入文件。traces/trace-eg.cmd
:一個簡單的記錄跟踪文件,以演示qtest
的操作在使用GDB調試qtest
之前,需要進行一些常規說明。 scripts/debug.py
涵蓋這些說明並提供基本的調試功能。
$ scripts/debug.py -h
usage: debug.py [-h] [-d | -a ]
optional arguments:
-h, --help show this help message and exit
-d, --debug Enter gdb shell
-a, --analyze Analyze the core dump file
$ scripts/debug.py -d
Reading symbols from lab0-c/qtest...done.
Signal Stop Print Pass to program Description
SIGALRM No No No Alarm clock
Starting program: lab0-c/qtest
cmd >
當qtest
在GDB外跑步時遇到分割故障時,我們可以在驗屍調試模式下調用GDB以找出錯誤。
核心轉儲文件是在qtest
的工作目錄中創建的。
$ ulimit -c unlimited
$ ulimit -c
unlimited
$ scripts/debug.py -a
Reading symbols from lab0-c/qtest...done.
[New LWP 9424]
Core was generated by ` lab0-c/qtest ' .
Program terminated with signal SIGSEGV, Segmentation fault.
#0 ...
#1 ... (backtrace information)
#2 ...
(gdb)
Linenoise已集成到qtest
中,提供以下用戶友好的功能:
小型Web服務器已經集成在qtest
命令行解釋器中,您可以通過在其提示符中運行web
命令來使用它。
$ ./qtest
cmd > web
listen on port 9999, fd is 3
內置Web服務器準備就緒後,在另一個終端中運行以下命令。
$ curl http://localhost:9999/new
$ curl http://localhost:9999/ih/1
$ curl http://localhost:9999/ih/2
$ curl http://localhost:9999/ih/3
$ curl http://localhost:9999/sort
$ curl http://localhost:9999/quit
lab0-c
根據BSD 2條款許可發布。此源代碼的使用由可以在許可證文件中找到的BSD式許可管轄。
外部源代碼: