Chrono Mock
BahasaBahasa Indonesia

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

FlagFungsinya
--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.

KodeArti
0berhasil - setiap proses yang membaca waktu melihat jam sesi
10berhasil sebagian - sebagian kanal tercakup, sebagian tidak
11tidak berhasil - penggantian tidak sampai ke kanal-kanal kunci
4tidak dapat ditentukan - cakupan tidak dapat dipastikan. “Tidak bisa dipastikan” yang jujur, bukan kelulusan pura-pura
12target 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
1kesalahan penggunaan - flag yang salah, ekspresi yang salah, atau skenario yang tidak diterima perintah ini
2target tidak dapat diluncurkan atau disuntik
3kesalahan 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
5operasi 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
6eksekusi 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
7sesi lain sudah berjalan - hanya satu sesi dalam satu waktu. Cukup coba lagi setelah sesi itu selesai
8sesi 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 --ticks membiarkan 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.

FlagFungsinya
--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:SSMenetapkan 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.

KodeArti
0terhitung
1kesalahan penggunaan - flag yang salah, tanggal yang mustahil, rentang yang meluap, atau file kalender yang tidak memiliki hari kerja sama sekali
5langkah 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”

Selanjutnya