Referensi baris perintah
Setiap flag dari kedua perintah, kedua tabel kode keluar, dan cara membaca apa yang dikembalikan. Versi naratif beserta alasannya ada di halaman CLI dan CI.
Dua perintah
chrono run memulai aplikasi pada tanggal dan jam yang berbeda.
chrono calc menghitung sebuah tanggal dan memberi tahu apa yang membuatnya menarik.
Keduanya berbagi satu tata bahasa langkah, sehingga pergeseran yang ditulis untuk yang satu
berarti sama pada yang lain.
chrono version menjawab pertanyaan ketiga yang jauh lebih kecil: build yang mana ini,
dari kedua inti mana executable ini berasal, dan versi protokol yang digunakannya. Satu baris di
stdout, sehingga skrip dapat menangkapnya.
chrono license menjawab yang keempat: lisensi tempat build ini didistribusikan,
penafian garansi, dan komponen pihak ketiga yang ditautkan ke dalamnya. Perintah ini juga
menyebutkan di mana teks lisensi lengkap dan pemberitahuan pihak ketiga berada di disk, atau
mengakui bila salinan yang Anda jalankan tidak memilikinya di sampingnya.
--components mencantumkan setiap komponen yang disertakan beserta versinya,
bukan ringkasan.
chrono presets mencantumkan katalog skenario seperti yang dibaca
--preset: setiap skenario di folder, ditulis dengan kata-kata yang dibaca tata
bahasa kalkulator, dan setiap berkas yang akan ditolaknya, beserta alasannya.
--json menulis chronomock.presets/1 dan --dir
menyebut folder lain.
chrono run <target> [options] chrono calc [options] chrono version # chrono 0.4.0 (x64, protocol 1) chrono license # GPL-3.0-only, dan apa yang disertakan chrono presets # katalog, seperti yang dibaca --preset chrono --help # penggunaan untuk semuanya
chrono run - opsi
| Flag | Fungsinya |
|---|---|
--at <moment> |
Momen tempat memulai, dalam zona sesi. Absolut
(2038-01-19T03:14:07) atau relatif dengan tanda di depan
(+1d, -2h). Satuan: s m h d w mo q y -
m adalah menit dan mo adalah bulan. Tanpa flag
ini, jam sesi dimulai dari waktu nyata saat ini, sehingga --mode xN saja
sekadar menjalankan target lebih cepat. |
--zone +HH:MM |
Zona sesi: zona tempat momen ditulis, dan zona yang dilaporkan oleh panggilan waktu lokal target. Selisih tetap, tanpa waktu musim panas. Tanpa flag ini, zona host sendiri. |
--mode flow|frozen|xN |
flow berjalan pada kecepatan nyata, frozen menahan jam,
xN menjalankannya N kali lebih cepat (x60 mengubah satu jam
menjadi semenit, x1440 satu hari). |
--scale-duration |
Percepat juga sumbu waktu berlalu: penghitung tick, waktu interupsi, jeda tidur, dan pewaktu. Penantian objek dihitung dan tetap pada durasi sebenarnya. Mati secara bawaan, karena jam dinding dan stopwatch adalah pertanyaan yang berbeda. Pewaktu atau penundaan yang diatur ke tanggal dan jam tertentu mengikuti jam sesi dengan atau tanpa opsi ini. |
--scale-qpc |
Menskalakan juga penghitung beresolusi tinggi, tempat monotonic Python 3.13+,
Stopwatch .NET, dan nanoTime Java membaca waktu berlalu.
Nonaktif secara bawaan: aplikasi yang mengukur waktu rendernya dengan penghitung itu dapat
tampak terdistorsi. |
--ticks N |
Mengakhiri sesi setelah N detak, masing-masing satu detik nyata, dan melaporkan. Tanpanya, alat tetap terpasang sampai target, dan setiap program yang dimulainya yang berjalan pada jam sesi, telah keluar - launcher yang langsung berakhir menyerahkan sesi kepada aplikasi yang dimulainya. |
--timeout <s> |
Menyerah setelah sekian detik dan keluar dengan 6, untuk pipeline yang tidak boleh menggantung. Terlepas dari flag ini, inti yang tidak mengatakan apa pun selama 15 detik dihentikan dan juga keluar dengan 6 - pada kedua kasus eksekusi terpotong, sehingga tidak membawa putusan. |
--args "..." |
Argumen untuk target, sebagai satu string, dipisahkan dengan aturan yang sama yang
digunakan Windows - sehingga argumen yang mengandung spasi tetap utuh. Untuk target
Chromium, --user-data-dir dan --remote-debugging-port ditolak,
bukan ditimpa: sesi memerlukan profil terisolasinya sendiri, dan berjalan diam-diam pada
profil peramban asli Anda adalah satu-satunya hal yang tidak boleh terjadi. |
--cwd <dir> |
Memulai target di direktori itu. Tanpanya target mewarisi direktori kita, seperti yang
dilakukan setiap eksekusi sebelum flag ini ada. Nilai kosong adalah kesalahan penggunaan,
bukan “tanpa direktori” - tidak ada dan kosong adalah dua hal yang berbeda, dan hanya
“tidak ada” yang dapat diberikan kepada Windows. Direktori yang tidak ada menghentikan sesi
dengan target.cwd_missing sebelum apa pun diluncurkan, alih-alih muncul
belakangan sebagai target yang tidak mau mulai. |
--preset <id> |
Mengambil momen dan kecepatan dari presets/<id>.json. Tidak dapat
digabung dengan --at, --mode, dan --scale-duration,
karena skenario itu kemudian menjadi satu-satunya sumber keduanya. |
--param id=value |
Mengisi parameter skenario. Dapat diulang, memerlukan --preset. Hanya pada
run, tanggal mulai masa percobaan secara bawaan diambil dari tanggal pembuatan
executable target, sehingga skenario percobaan menghitung dari hari aplikasi dipasang tanpa
Anda mengetikkannya. |
--set-after T:M |
Pada detak T, ubah kecepatan menjadi M. Selama berjalan pengali minimal 1 - pembekuan di tengah sesi tidak ditawarkan di sini. |
--jump-after T:moment |
Pada detak T, lompatkan jam ke momen itu, absolut atau relatif, dalam zona sesi. |
--force |
Mempertahankan sesi bahkan ketika putusan pembuka menyatakan penggantian waktu tidak berlaku - secara bawaan target dihentikan, karena sesi yang tidak membuktikan apa pun lebih buruk daripada tidak ada sesi. Putusan tidak berubah, begitu pula kode keluar. Flag ini hanya menentukan apakah target terus berjalan. |
--no-embedded |
Membiarkan halaman web di dalam aplikasi (WebView2, Qt WebEngine) pada jam asli dan tidak membuka port debugging. Tanpa opsi ini, sesi meminta mesin semacam itu membuka port lokal dan menaruh halamannya pada jam sesi melaluinya - selama port terbuka, program lain mana pun di komputer ini dapat memakainya untuk menjangkau halaman tersebut. |
--elevated-embedded |
Untuk aplikasi yang berjalan sebagai administrator, dari Chrono Mock yang juga
berjalan sebagai administrator. WebView2 mengabaikan untuk aplikasi seperti itu
pengaturan yang dipakai sesi untuk menjangkau halamannya, sehingga sesi menulis satu
nilai ke registry mesin (HKLM, dinamai sesuai .exe aplikasi) selama sesi berlangsung
dan menghapusnya di akhir. Selama aplikasi berjalan, program lain mana pun di komputer
ini dapat menjangkau halamannya lewat port, dan aplikasi memiliki hak administrator.
Tidak bersama --no-embedded. |
--keep-background-timers |
Memulai mesin web - peramban aplikasi Chromium atau Electron, atau mesin di dalam
sebuah aplikasi - dengan perlambatan timer pada jendela tersembunyi dimatikan,
sehingga jendela yang diminimalkan tetap memakai kecepatan sesi. Aplikasi pun bekerja
dengan kecepatan penuh saat tersembunyi. Aplikasi yang dijalankan sebagai
administrator lewat --elevated-embedded tidak mendapatkannya. |
--dry-run |
Mencetak seperti apa sesi nantinya dan tidak memulai apa pun: momen dan zona yang
telah diselesaikan beserta asalnya, apa yang diisikan skenario ke setiap parameter,
argumen setelah dipisah, dan mana dari kedua mekanisme yang akan dipakai target. Tidak
ada proses yang dimulai dan tidak ada file yang ditulis, termasuk yang dinamai
--report. Keluar dengan 0 untuk rencana yang dapat dijalankan dan 2 untuk
target yang tidak ada, yang merupakan kode yang diberikan eksekusi nyata untuk fakta
yang sama. Rencana tidak membawa putusan dan menyatakannya - hanya sesi nyata yang
memilikinya. Dengan --json rencana berupa data, termasuk
session.elevated_embedded dan
session.elevated_embedded_value, yaitu nama berkas yang akan menjadi nama
nilai registry saat opsi berlaku untuk target .exe, dan null bila tidak.
Adanya nama di sana bukan jaminan penulisan: sesi menulis nilai itu hanya bila Chrono
Mock sendiri berjalan sebagai administrator. |
--report <path> |
Menulis laporan untuk manusia ke file. Putusan selain berhasil membuka file itu dengan banner bukti tidak andal, karena bukti yang menyembunyikan keraguannya sendiri lebih buruk daripada tidak ada bukti. Sesi dengan putusan berhasil juga mendapat banner ini bila aplikasi tidak membaca satu pun jam yang diganti oleh sesi, atau bila aplikasi itu program Go, yang jam dindingnya tidak terjangkau Chrono Mock. File juga menyebut eksekusinya sendiri: versi, waktu mulai, target, foldernya, dan flag. |
--report-args |
Bersama --report, juga menulis argumen target ke file itu apa adanya. Mati secara bawaan, karena argumen bisa berisi kata sandi - file lalu hanya menyebut jumlahnya. |
--json |
Mengeluarkan sesi sebagai rekaman yang dapat dibaca mesin, bukan laporan - aliran yang sama yang dikonsumsi jendela itu sendiri. Keluaran aplikasi konsol sendiri masuk ke standard error, sehingga standard output hanya berisi rekaman dan tidak ada yang lain. Aplikasi yang masih berjalan ketika sesi berakhir terus menulis ke sana, sehingga apa pun yang membaca standard error sampai akhir akan menunggunya, dan eksekusi menyatakan hal itu. |
chrono run - kode keluar
Kode keluar adalah putusan sesi, bukan apa yang dikembalikan aplikasi. Kode keluar aplikasi sendiri dilaporkan terpisah, dalam laporan dan dalam data sesi - mengapa dibuat begitu dijelaskan oleh halaman CLI dan CI.
| Kode | Arti |
|---|---|
| 0 | berhasil - setiap proses yang membaca waktu melihat jam sesi |
| 10 | berhasil sebagian - sebagian kanal tercakup, sebagian tidak |
| 11 | tidak berhasil - penggantian tidak sampai ke kanal-kanal kunci |
| 4 | tidak dapat ditentukan - cakupan tidak dapat dipastikan. “Tidak bisa dipastikan” yang jujur, bukan kelulusan pura-pura |
| 12 | target menghilang tepat setelah injeksi dan tidak meninggalkan apa pun yang berjalan pada jam sesi, yang menunjukkan aplikasi satu-instans yang menyerahkan kendali ke salinan yang sudah berjalan, atau penyerahan ke program yang tidak dapat dimasuki sesi, biasanya yang berbeda bitness. Target yang memulai aplikasi lalu berakhir adalah launcher, dan sesi berlanjut untuk aplikasinya |
| 1 | kesalahan penggunaan - flag yang salah, ekspresi yang salah, atau skenario yang tidak diterima perintah ini |
| 2 | target tidak dapat diluncurkan atau disuntik |
| 3 | kesalahan internal - engine tidak dapat dimulai, menemui keadaan tak terduga, atau berhenti sebelum menutup sesi (apa pun kode keluarnya sendiri). Eksekusi seperti itu tidak membawa putusan |
| 5 | operasi tidak disertakan dalam rilis ini - misalnya skenario yang momennya memerlukan kalender, yang belum dapat dimuat run. Sengaja dibedakan dari kesalahan penggunaan: Anda meminta sesuatu yang belum ada, bukan sesuatu yang salah |
| 6 | eksekusi terpotong - --timeout habis, atau engine berhenti merespons selama 15 detik dan dihentikan. Ini bukan putusan: sesi terputus, sehingga tidak membuktikan apa pun tentang target ke arah mana pun |
| 7 | sesi lain sudah berjalan - hanya satu sesi dalam satu waktu. Cukup coba lagi setelah sesi itu selesai |
| 8 | sesi sudah mencapai putusan, tetapi buktinya tidak ada di file yang disebut --report - disk penuh, atau program lain membuka file lama itu, yang kemudian tetap seperti semula. Putusan tetap ada di laporan yang dicetak perintah |
Membaca laporan
Tanpa --json sesi berakhir dengan laporan polos. Setiap baris adalah fakta yang
diamati sesi atau tidak ada - tidak ada yang diisi dengan nilai bawaan yang masuk akal.
Chrono Mock - session report
target: .\build\test.exe
verdict: WORKS - time substitution took effect (processes: 1)
every process that read time saw the session clock
session: fake clock reached 2038-01-19T03:14:08
real elapsed 1.3s, fake elapsed 1.3s
exited: the target closed itself with code 3
covered channels (substituted, with call counts, 10 calls in all):
- pid 21240: GetSystemTimeAsFileTime (5 calls)
- pid 21240: GetLocalTime (5 calls)
observed channels (hooked but left real):
- pid 21240: NtCreateUserProcess (0 calls)
warnings:
- the target opened a network connection ...
- verdict - putusan keluarga atas proses induk dan setiap proses anak, beserta jumlah proses. Inilah angka yang dibawa kode keluar.
- exited - kode keluar milik aplikasi sendiri, dan hanya bila ia
menutup dirinya sendiri. Eksekusi yang dibatasi
--ticksmembiarkan target tetap berjalan, sesi Chromium adalah sesi yang ditutup alat itu sendiri, dan sesi yang tidak pernah dimulai tidak memiliki kode seperti itu - barisnya kemudian tidak ada, bukan menampilkan nol karangan. Kode crash datang sebagai angka negatif besar, sehingga ia juga diberi bentuk heksadesimalnya. - covered - kanal yang dijangkau penggantian waktu, dengan berapa kali masing-masing benar-benar dipanggil, per proses. Hitungan tidak pernah dijumlahkan antarproses: audit satu proses tidak boleh meminjam angka milik proses lain. Penghitung berhenti di 1048576 dan setelah itu menunjukkan setidaknya angka tersebut.
- observed - kanal yang dicegat tetapi sengaja dibiarkan nyata, seperti wait objek dan timer multimedia. Kelompoknya sendiri, sehingga tidak pernah dibaca sebagai tergantikan.
- uncovered - kanal yang diminta aplikasi dan tidak dicakup sesi. Inilah yang mengubah putusan menjadi sebagian.
- not fully cleaned up - apa pun yang tidak dapat dihapus saat pembongkaran. Tidak ada pada akhir yang bersih, yang merupakan kasus normal.
chrono calc - opsi
Tanpa bahasa alami: setiap flag adalah satu langkah, dan urutan flag adalah urutan langkah. Hasil setelah setiap langkah dicetak, sehingga langkah yang salah terlihat, bukan terkubur.
| Flag | Fungsinya |
|---|---|
--base today|now|<moment> |
Dari mana memulai, bawaan today. Diselesaikan dalam zona sesi. Hari yang
mustahil seperti 2025-02-31 ditolak, tidak pernah diam-diam dinormalkan ke
bulan berikutnya. |
--base-utc <moment> |
Seperti --base, tetapi awalnya adalah satu instan dalam UTC, dengan
Z di akhir yang opsional, bukan pembacaan jam dinding di zona sesi. |
--shift ±N<unit> |
Dapat diulang. Tanda wajib. Satuan: s m h d w mo q y bd, atau nama lengkapnya.
m adalah menit, mo adalah bulan. Bulan, kuartal,
dan tahun dilipat ke tanggal kalender dengan pembatasan, sehingga sebulan setelah 31 Januari
adalah akhir Februari, bukan sejumlah tick yang tetap. bd (hari kerja)
memerlukan --calendar. |
--set-time HH:MM:SS | Menetapkan jam dalam hari pada hasil saat ini. |
--snap <target> |
Melompat ke batas periode: som eom soq eoq soy eoy (awal atau akhir bulan,
kuartal, tahun). Awal adalah hari pertama pukul 00:00:00, akhir adalah hari terakhir
pukul 23:59:59. |
--nearest nbd|pbd |
Hari kerja terdekat ke depan atau ke belakang, termasuk hari ini bila sudah hari kerja.
Memerlukan --calendar. |
--to-zone +HH:MM |
Sebuah langkah: menyatakan ulang instan yang sama dalam selisih tetap lain.
Instannya dipertahankan, sehingga nilai epoch tidak bergerak dan hanya bidang sipil yang
berubah. Jangan dikacaukan dengan --zone. |
--zone +HH:MM |
Zona sesi, dipakai untuk menyelesaikan today dan now serta untuk
menampilkan hasil. Tanpanya, zona host. |
--calendar us-banking|us-federal|pl |
Memuat kalender hari libur. Menambahkan hari kerja dan hari libur ke metadata serta
mengaktifkan bd dan --nearest. Kedua kalender Amerika
berbeda dalam cara menetapkan hari libur yang jatuh pada akhir pekan, yang persis
jenis selisih satu hari yang seharusnya ditemukan oleh pengujian. Setiap kalender
menjawab untuk satu rentang tahun: pl mulai 2002, us-federal
mulai 1960, dan us-banking mulai 2008. Langkah hari kerja yang mencapai
hari sebelum rentang itu ditolak dengan kode 1, dan tanggal sebelum rentang
ditampilkan sebagai tidak dinilai. Bila hari libur sebuah kalender terakhir dicocokkan
dengan undang-undang lebih dari setahun lalu, hari yang lebih baru yang dinilainya
diberi tanda calendar_outdated, karena hari libur yang lebih baru mungkin
belum ada. |
--preset <id> --param id=value |
Momen bernama dari presets/<id>.json, dengan parameternya terisi. Tidak
dapat digabung dengan flag langkah dan dengan --analyze, dan dapat digabung
dengan --calendar, --zone, dan --format. |
--analyze <date> |
Membaca kembali tanggal yang ditempelkan dan menyebutkan apa itu. 04/08 yang
ambigu ditampilkan dalam kedua pembacaan, Amerika dan Polandia, bukan
ditebak - ambiguitas itu adalah sumber nyata laporan bug yang keliru. |
--format <mask> |
Mencetak hasil juga dalam topeng Anda sendiri, agar cocok dengan format aplikasi yang
diuji: yyyy-MM-dd HH:mm:ss. Token peka huruf besar-kecil dalam pengertian .NET
dan Java - M adalah bulan, m adalah menit. |
--json |
Keluaran mesin (chronomock.calc/1) untuk semua di atas, sehingga pipeline
dapat menghitung tanggal dan langsung memasukkannya kembali ke chrono run. |
# Hari kerja terakhir kuartal, kalender perbankan Amerika chrono calc --base today --snap eoq --nearest pbd --calendar us-banking
chrono calc - kode keluar
Tabel terpisah yang lebih kecil: kalkulator tidak memiliki putusan cakupan untuk dilaporkan.
| Kode | Arti |
|---|---|
| 0 | terhitung |
| 1 | kesalahan penggunaan - flag yang salah, tanggal yang mustahil, rentang yang meluap, atau file kalender yang tidak memiliki hari kerja sama sekali |
| 5 | langkah atau satuan tidak disertakan dalam rilis ini, atau langkah memerlukan kalender yang tidak Anda berikan. Sengaja dipisahkan dari kesalahan penggunaan, agar skrip dapat membedakan “belum” dari “salah” |