Menilai Keterampilan Pemrograman C Anda
Lab ini akan memberi Anda latihan gaya pemrograman yang Anda perlukan agar dapat mengerjakannya dengan baik, terutama untuk tugas-tugas selanjutnya di kelas. Materi yang dibahas semuanya harus ditinjau untuk Anda. Beberapa keterampilan yang diuji adalah:
Lab ini melibatkan penerapan antrian, mendukung disiplin antrian masuk terakhir, keluar pertama (LIFO) dan masuk pertama keluar pertama (FIFO). Struktur data yang mendasarinya adalah daftar tertaut ganda melingkar, yang disempurnakan untuk membuat beberapa operasi lebih efisien.
Ada beberapa prasyarat yang harus diinstal pada mesin Anda sebelum Anda dapat membuat dan menjalankan autograder.
Perintah berikut akan menginstal semua dependensi yang diperlukan dan opsional di Ubuntu Linux 20.04 atau lebih baru:
$ sudo apt install build-essential git clang-format cppcheck aspell colordiff valgrind
Beberapa distro seperti Arch Linux tidak dapat menginstal aspell-en
dengan aspell
, dan Anda harus menginstalnya secara eksplisit:
$ sudo pacman -S aspell-en
Catatan: Versi Cppcheck minimal harus 1,90, jika tidak maka akan melaporkan kesalahan dengan positif palsu. Anda bisa mendapatkan versinya dengan menjalankan $ cppcheck --version
. Periksa Info Pengembang untuk membuat Cppcheck dari sumber.
clang-format
ke vim
Jika Anda ingin menjalankan clang-format
secara otomatis setelah menyimpan dengan vim, format dentang mendukung integrasi untuk vim menurut dokumentasi Dentang.
Dengan menambahkan yang berikut ke $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 ()
Kemudian, ia memiliki integrasi tanpa upaya ke dalam alur kerja pengkodean karena dapat menangani perubahan pemformatan sambil menyimpan file. Catatan: di Ubuntu Linux 18.04, jalur ke clang-format.py
adalah /usr/share/vim/addons/syntax/
.
Sebelum menjalankan autograder, kompilasi kode Anda untuk membuat program pengujian qtest
$ make
Periksa kebenaran kode Anda, yaitu autograder:
$ make test
Periksa contoh penggunaan qtest
:
$ make check
Setiap langkah tentang pemanggilan perintah akan ditampilkan sesuai.
Periksa masalah memori kode Anda:
$ make valgrind
./.valgrindrc
untuk menyesuaikan argumen Valgrind$ make clean
atau $ rm /tmp/qtest.*
untuk membersihkan file sementara yang dibuat oleh target valgrindOpsi tambahan dapat dikenali dengan membuat:
VERBOSE
: mengontrol verbositas build. Jika VERBOSE=1
, ulangi setiap perintah dalam proses pembuatan.SANITIZER
: mengaktifkan build yang diarahkan pada sanitizer. Saat ini, AddressSanitizer didukung. qtest
qtest
menyediakan penerjemah perintah yang dapat membuat dan memanipulasi antrian.
Jalankan $ ./qtest -h
untuk melihat daftar opsi baris perintah
Saat Anda menjalankan $ ./qtest
, itu akan memberikan prompt perintah cmd>
. Ketik help
untuk melihat daftar perintah yang tersedia.
Anda akan menyerahkan dua file ini
queue.h
: Versi deklarasi yang dimodifikasi termasuk kolom baru yang ingin Anda perkenalkanqueue.c
: Versi kode antrian yang dimodifikasi untuk memperbaiki kekurangan kode asliAlat untuk mengevaluasi kode antrean Anda
Makefile
: Membangun program evaluasi qtest
README.md
: File iniscripts/driver.py
: Program driver, menjalankan qtest
pada serangkaian jejak standarscripts/debug.py
: Program pembantu untuk GDB, mengeksekusi qtest
tanpa SIGALRM dan/atau menganalisis file dump inti yang dihasilkan.File pembantu
console.{c,h}
: Mengimplementasikan juru bahasa baris perintah untuk qtestreport.{c,h}
: Mengimplementasikan pencetakan informasi pada tingkat verbositas yang berbedaharness.{c,h}
: Versi malloc/free/strdup yang disesuaikan untuk menyediakan kerangka pengujian yang ketatqtest.c
: Kode untuk qtest
Lacak file
traces/trace-XX-CAT.cmd
: Melacak file yang digunakan oleh driver. Ini adalah file masukan untuk qtest
.traces/trace-eg.cmd
: File jejak sederhana dan terdokumentasi untuk mendemonstrasikan pengoperasian qtest
Sebelum menggunakan GDB debug qtest
, ada beberapa instruksi rutin yang perlu dilakukan. Skrip scripts/debug.py
mencakup instruksi ini dan menyediakan fungsi debug dasar.
$ 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 >
Ketika qtest
mengalami kesalahan Segmentasi saat dijalankan di luar GDB, kita dapat memanggil GDB dalam mode debugging post-mortem untuk mencari tahu bug tersebut.
File dump inti dibuat di direktori kerja 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 diintegrasikan ke dalam qtest
, menyediakan fitur ramah pengguna berikut:
Server web kecil sudah terintegrasi dalam penerjemah baris perintah qtest
, dan Anda dapat menggunakannya dengan menjalankan perintah web
di promptnya.
$ ./qtest
cmd > web
listen on port 9999, fd is 3
Jalankan perintah berikut di terminal lain setelah server web internal siap.
$ 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
dirilis di bawah lisensi klausa BSD 2. Penggunaan kode sumber ini diatur oleh lisensi bergaya BSD yang dapat ditemukan di file LICENSE.
Kode sumber eksternal: