あなたの 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実行すると、そのバージョンを取得できます。ソースから Cppcheck をビルドする場合は、開発者情報を確認してください。
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 によって作成された一時ファイルをクリーンアップします。追加のオプションは make によって認識できます。
VERBOSE : ビルドの冗長性を制御します。 VERBOSE=1の場合、ビルド プロセスで各コマンドをエコーします。SANITIZER : サニタイザーによるビルドを有効にします。現時点では、AddressSanitizer がサポートされています。 qtestの使用qtestキューを作成および操作できるコマンド インタープリターを提供します。
$ ./qtest -hを実行して、コマンドライン オプションのリストを表示します。
$ ./qtestを実行すると、コマンド プロンプトcmd>が表示されます。 helpと入力すると、使用可能なコマンドのリストが表示されます。
この 2 つのファイルを提出していただきます
queue.h : 導入する新しいフィールドを含む宣言の修正バージョンqueue.c : 元のコードの欠陥を修正するためのキュー コードの修正バージョンキューコードを評価するためのツール
Makefile : 評価プログラムqtestをビルドします。README.md : このファイルscripts/driver.py : ドライバー プログラムは、標準のトレース セットに対してqtestを実行します。scripts/debug.py : GDB のヘルパー プログラム。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/quitlab0-c 、BSD 2 条項ライセンスに基づいてリリースされています。このソース コードの使用は、LICENSE ファイルにある BSD スタイルのライセンスによって管理されます。
外部ソースコード: