Komut satırı başvurusu
İki komutun tüm bayrakları, her iki çıkış kodu tablosu ve dönen çıktının nasıl okunacağı. Gerekçeleriyle birlikte anlatım sürümü CLI ve CI sayfasında.
İki komut
chrono run bir uygulamayı farklı bir tarih ve saatte başlatır.
chrono calc bir tarihi hesaplar ve onu neyin ilginç kıldığını söyler.
İkisi tek bir adım dilbilgisini paylaşır; bu yüzden biri için yazılmış bir kaydırma diğerinde de
aynı anlama gelir.
chrono version üçüncü, çok daha küçük bir soruyu yanıtlar: bunun hangi derleme
olduğu, çalıştırılabilir dosyanın iki çekirdekten hangisi olduğu ve konuştuğu protokol sürümü.
stdout’a tek bir satır yazar; böylece bir betik bunu yakalayabilir.
chrono license dördüncüsünü yanıtlar: bu derlemenin hangi lisansla dağıtıldığı,
garanti reddi ve içine bağlanan üçüncü taraf bileşenler. Ayrıca tam lisans metninin ve
üçüncü taraf bildirimlerinin diskte nerede olduğunu söyler; çalıştırdığınız kopyanın yanında
bunlar yoksa bunu da kabul eder. --components, özet yerine paketlenen her
bileşeni sürümüyle birlikte listeler.
chrono presets, senaryo kataloğunu --preset'in okuduğu biçimde
listeler: klasördeki her senaryoyu hesaplayıcının dil bilgisinin okuduğu sözcüklerle ve
reddedeceği her dosyayı nedeniyle birlikte gösterir. --json
chronomock.presets/1 yazar, --dir başka bir klasörü belirtir.
chrono run <target> [options] chrono calc [options] chrono version # chrono 0.4.0 (x64, protocol 1) chrono license # GPL-3.0-only ve pakete dahil olanlar chrono presets # katalog, --preset'in okuduğu biçimde chrono --help # hepsinin kullanımı
chrono run - seçenekler
| Bayrak | Ne yapar |
|---|---|
--at <moment> |
Başlanacak an, oturum diliminde. Mutlak
(2038-01-19T03:14:07) ya da başında işaret olan göreli
(+1d, -2h). Birimler: s m h d w mo q y -
m dakika, mo aydır. Bu bayrak olmadan oturum
saati gerçek geçerli zamandan başlar; yani tek başına --mode xN hedefi
yalnızca daha hızlı çalıştırır. |
--zone +HH:MM |
Oturum dilimi: anın yazıldığı dilim ve hedefin yerel saat çağrılarının bildirdiği dilim. Yaz saati uygulaması olmayan sabit bir kayma. Verilmezse ana makinenin kendi dilimi. |
--mode flow|frozen|xN |
flow gerçek hızda çalışır, frozen saati yerinde tutar,
xN N kat hızlı çalıştırır (x60 bir saati bir dakikaya,
x1440 bir günü bir dakikaya çevirir). |
--scale-duration |
Geçen süre eksenini de hızlandırır: tik sayaçları, kesme zamanı, uyumalar ve zamanlayıcılar. Nesne beklemeleri sayılır ve gerçek sürelerini korur. Varsayılan olarak kapalıdır, çünkü duvar saati ve kronometre farklı sorulardır. Belirli bir tarih ve saate kurulan bir zamanlayıcı veya gecikme bu seçenekle de onsuz da oturum saatini izler. |
--scale-qpc |
Yüksek çözünürlüklü sayacı da ölçekler; Python 3.13+ monotonic, .NET
Stopwatch ve Java nanoTime geçen zamanı buradan okur.
Varsayılan olarak kapalıdır: render süresini bu sayaca göre ölçen bir uygulama bozuk
görünebilir. |
--ticks N |
Oturumu N kalp atışından sonra, her biri bir gerçek saniye, sonlandırır ve bildirir. Bu olmadan araç, hedef ve onun başlattığı, oturum saatinde çalışan her program çıkana kadar bağlı kalır - hemen biten bir başlatıcı oturumu başlattığı uygulamaya bırakır. |
--timeout <s> |
Bu kadar saniye sonra vazgeçer ve 6 ile çıkar; takılmaması gereken bir pipeline için. Bu bayraktan bağımsız olarak, 15 saniye boyunca hiçbir şey söylemeyen bir çekirdek durdurulur ve o da 6 ile çıkar - iki durumda da çalıştırma yarıda kesilmiştir, bu yüzden kararı yoktur. |
--args "..." |
Hedefe verilecek bağımsız değişkenler, tek bir dize olarak, Windows’un kullandığı aynı
kurala göre bölünür - böylece boşluk içeren bir bağımsız değişken korunur. Bir Chromium
hedefi için --user-data-dir ve --remote-debugging-port
geçersiz kılınmak yerine reddedilir: oturumun kendi yalıtılmış profili gerekir ve sessizce
gerçek tarayıcı profilinizde çalışmak, olmaması gereken tek şeydir. |
--cwd <dir> |
Hedefi o dizinde başlatır. Verilmezse hedef bizimkini devralır; bu bayrak var olmadan önce
her çalıştırma böyleydi. Boş bir değer “dizin yok” değil, kullanım hatasıdır - olmayan ile
boş farklı şeylerdir ve Windows’a yalnızca olmayan verilebilir. Var olmayan bir dizin,
herhangi bir şey başlatılmadan önce oturumu target.cwd_missing ile durdurur;
yoksa bu, sonradan başlamayan bir hedef olarak ortaya çıkardı. |
--preset <id> |
Anı ve hızı presets/<id>.json dosyasından alır. --at,
--mode ve --scale-duration ile birlikte kullanılamaz; çünkü
senaryo artık ikisinin de tek kaynağıdır. |
--param id=value |
Bir senaryo parametresini doldurur. Tekrarlanabilir, --preset gerektirir.
Yalnızca run içinde, bir deneme başlangıç tarihi varsayılan olarak hedef
çalıştırılabilir dosyanın kendi oluşturulma tarihidir; böylece bir deneme senaryosu, siz
yazmadan, uygulamanın kurulduğu günden saymaya başlar. |
--set-after T:M |
T. kalp atışında hızı M yapar. Çalışırken çarpan en az 1’dir - oturum ortasında dondurma burada sunulmaz. |
--jump-after T:moment |
T. kalp atışında saati o ana, mutlak ya da göreli, oturum diliminde atlatır. |
--force |
Açılış kararı değişikliğin etkili olmadığını söylese bile oturumu korur - varsayılan olarak hedef bunun yerine durdurulur, çünkü hiçbir şey kanıtlamayan bir oturum, hiç oturum olmamasından kötüdür. Karar değişmez, çıkış kodu da. Bu yalnızca hedefin çalışmaya devam edip etmeyeceğini belirler. |
--no-embedded |
Uygulamanın içindeki web sayfalarını (WebView2, Qt WebEngine) gerçek saatte bırakır ve hata ayıklama bağlantı noktası açmaz. Bu bayrak olmadan oturum, böyle bir motordan yerel bir bağlantı noktası açmasını ister ve sayfalarını onun üzerinden oturum saatine alır - bağlantı noktası açık olduğu sürece bu bilgisayardaki başka herhangi bir program onu kullanarak bu sayfalara ulaşabilir. |
--elevated-embedded |
Yönetici olarak çalışan bir uygulama için, o da yönetici olarak çalışan bir Chrono
Mock'tan. WebView2, böyle bir uygulamada oturumun sayfalarına ulaştığı ayarı yok
sayar; bu yüzden oturum, süresi boyunca makinenin kayıt defterine (HKLM, uygulamanın
.exe dosyasının adıyla) bir değer yazar ve sonunda siler. Uygulama çalışırken bu
bilgisayardaki başka herhangi bir program bağlantı noktası üzerinden sayfalarına
ulaşabilir ve uygulamanın yönetici hakları vardır. --no-embedded ile
birlikte kullanılmaz. |
--keep-background-timers |
Web motorunu - bir Chromium ya da Electron uygulamasının tarayıcısını veya bir
uygulamanın içindeki motoru - gizli pencerelerdeki zamanlayıcı yavaşlatması kapalı
olarak başlatır; böylece simge durumuna küçültülmüş bir pencere de oturum hızını
korur. Uygulama o zaman gizliyken de tam hızla çalışır.
--elevated-embedded ile yönetici olarak başlatılan bir uygulama bunu
almaz. |
--dry-run |
Oturumun ne olacağını yazdırır ve hiçbir şey başlatmaz: çözümlenen an ve dilim ile
nereden geldikleri, bir senaryonun her parametreyi neyle doldurduğu, bölünmüş bağımsız
değişkenler ve hedefin iki mekanizmadan hangisini kullanacağı. Hiçbir süreç
başlatılmaz ve --report’un adını verdiği dosya dahil hiçbir dosya
yazılmaz. Uygulanabilir bir plan için 0, var olmayan bir hedef için 2 ile çıkar;
gerçek bir çalıştırma aynı durum için bu kodu verir. Bir planın kararı yoktur ve bunu
söyler - yalnızca gerçek bir oturumun kararı vardır. --json ile plan veri
olarak verilir; buna session.elevated_embedded ve
session.elevated_embedded_value da dahildir. İkincisi, seçenek bir
.exe hedefine uygulandığında kayıt defteri değerine ad verecek dosya
adıdır, aksi halde null olur. Orada bir ad bulunması yazılacağının sözü değildir:
oturum değeri yalnızca Chrono Mock'un kendisi yönetici olarak çalışıyorsa yazar. |
--report <path> |
İnsan raporunu bir dosyaya yazar. Çalışıyor dışındaki bir karar, dosyayı güvenilmez-kanıt başlığıyla başlatır; çünkü kendi şüphesini saklayan kanıt, hiç kanıt olmamasından kötüdür. Kararı çalışıyor olan bir oturum da, uygulama oturumun değiştirdiği saatlerin hiçbirini okumadıysa ya da duvar saatine Chrono Mock'un ulaşamadığı bir Go programıysa bu başlığı alır. Dosya çalıştırmanın kendisini de adlandırır: sürüm, başlama zamanı, hedef, klasörü ve seçenekler. |
--report-args |
--report ile birlikte, hedefin argümanlarını da o dosyaya kelimesi kelimesine yazar. Varsayılan olarak kapalıdır, çünkü bir argüman parola taşıyabilir - dosya o zaman yalnızca kaç tane olduklarını söyler. |
--json |
Oturumu rapor yerine makinece okunabilir kayıtlar olarak verir - pencerenin kendisinin tükettiği akışın aynısı. Bir konsol uygulamasının kendi çıktısı standart hataya gider; yani standart çıktı kayıtlardan başka bir şey içermez. Oturum bittiğinde hâlâ çalışan bir uygulama oraya yazmaya devam eder; bu yüzden standart hatayı sonuna kadar okuyan her şey onu bekler ve çalıştırma bunu söyler. |
chrono run - çıkış kodları
Çıkış kodu, uygulamanın döndürdüğü değil, oturum kararıdır. Uygulamanın kendi çıkış kodu raporda ve oturum verisinde ayrıca bildirilir - bunun neden böyle yapıldığını CLI ve CI sayfası açıklar.
| Kod | Anlamı |
|---|---|
| 0 | çalışıyor - zamanı okuyan her süreç oturum saatini gördü |
| 10 | kısmen çalışıyor - bazı kanallar kapsandı, bazıları kapsanmadı |
| 11 | çalışmıyor - değişiklik kilit kanallara ulaşmadı |
| 4 | belirsiz - kapsama belirlenemedi. Dürüst bir “söyleyemem”, asla numara yapılmış bir başarı değil |
| 12 | hedef enjeksiyondan hemen sonra ortadan kayboldu ve oturum saatinde çalışan hiçbir şey bırakmadı; bu, tek örnekli bir uygulamanın zaten çalışan bir kopyaya devrettiğini ya da oturumun giremediği, genellikle diğer bit genişliğindeki bir programa devir yapıldığını düşündürür. Uygulamayı başlatıp biten bir hedef bir başlatıcıdır ve oturum uygulama için devam eder |
| 1 | kullanım hatası - hatalı bir bayrak, hatalı bir ifade ya da bu komutun kabul etmediği bir senaryo |
| 2 | hedef başlatılamadı ya da içine enjekte edilemedi |
| 3 | iç hata - motor başlatılamadı, beklenmedik bir durumla karşılaştı ya da oturumu kapatmadan önce durdu (kendi çıkış kodu ne olursa olsun). Böyle bir çalıştırmanın kararı yoktur |
| 5 | işlem bu sürümde derlenmemiş - örneğin anı bir takvim gerektiren ve run’ın henüz yükleyemediği bir senaryo. Bilerek kullanım hatasından ayrı tutulmuştur: yanlış bir şey istemediniz, henüz var olmayan bir şey istediniz |
| 6 | çalıştırma yarıda kesildi - --timeout doldu ya da motor 15 saniye boyunca yanıt vermeyi bıraktı ve durduruldu. Bu bir karar değildir: oturum kesintiye uğradığı için hedef hakkında ne bir yönde ne de diğerinde bir şey kanıtlar |
| 7 | başka bir oturum zaten çalışıyor - aynı anda tek oturum. O bittikten sonra yeniden denemek yeterli |
| 8 | oturum bir karara vardı, ancak kanıtı --report ile verilen dosyada değil - disk doluydu ya da başka bir program eski dosyayı açık tutuyordu, o dosya da olduğu gibi kalır. Karar, komutun yazdırdığı raporda yine yer alır |
Raporu okumak
--json olmadan oturum düz bir raporla biter. Her satır ya oturumun gözlemlediği bir
gerçektir ya da hiç yoktur - hiçbir şey makul bir varsayılanla doldurulmaz.
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 - ana süreç ve tüm alt süreçler üzerinden aile kararı, süreç sayısıyla birlikte. Çıkış kodunun taşıdığı sayı budur.
- exited - uygulamanın kendi çıkış kodu, ve yalnızca kendi kendini
kapattıysa.
--ticksile sınırlanan bir çalıştırma hedefi çalışır bırakır, bir Chromium oturumunu araç kendisi kapatır ve hiç başlamamış bir oturumun böyle bir kodu yoktur - satır o zaman uydurma bir sıfır göstermek yerine yoktur. Çökme kodu büyük bir negatif sayı olarak gelir; bu yüzden onaltılık biçimi de verilir. - covered - değişikliğin ulaştığı kanallar, her birinin gerçekte kaç kez çağrıldığıyla, süreç başına. Sayılar süreçler arasında asla toplanmaz: bir sürecin denetimi başka birinin sayılarını ödünç almamalıdır. Bir sayaç 1048576’da durur ve o andan sonra en az bu kadar gösterir.
- observed - yakalanmış ama bilerek gerçek bırakılmış kanallar; nesne beklemeleri ve çok ortamlı zamanlayıcılar gibi. Kendi kovaları vardır, böylece asla değiştirilmiş olarak okunmazlar.
- uncovered - uygulamanın istediği ve oturumun kapsamadığı kanallar. Bir kararı kısmen yapan budur.
- not fully cleaned up - sonlandırmanın kaldıramadığı her şey. Temiz bir bitişte, yani normal durumda, yoktur.
chrono calc - seçenekler
Doğal dil yok: her bayrak bir adımdır ve bayrakların sırası adımların sırasıdır. Her adımdan sonraki sonuç yazdırılır; böylece yanlış bir adım gömülü kalmaz, görünür olur.
| Bayrak | Ne yapar |
|---|---|
--base today|now|<moment> |
Nereden başlanacağı, varsayılan today. Oturum diliminde çözümlenir.
2025-02-31 gibi imkânsız bir gün reddedilir, asla sessizce sonraki aya
çevrilmez. |
--base-utc <moment> |
--base gibi, ancak başlangıç oturum diliminde bir duvar saati okuması
değil, sonunda isteğe bağlı Z olan UTC'de bir andır. |
--shift ±N<unit> |
Tekrarlanabilir. İşaret zorunludur. Birimler: s m h d w mo q y bd ya da tam
adları. m dakika, mo aydır. Aylar, çeyrekler ve
yıllar takvim tarihine sınırlandırılarak uygulanır; yani 31 Ocak’tan bir ay sonrası, sabit
bir tick sayısı değil, Şubat sonudur. bd (iş günü) --calendar
gerektirir. |
--set-time HH:MM:SS | Geçerli sonucun günün saatini ayarlar. |
--snap <target> |
Bir dönem sınırına atlar: som eom soq eoq soy eoy (ayın, çeyreğin, yılın
başı ya da sonu). Bir başlangıç ilk gün 00:00:00, bir son ise son gün 23:59:59’dur. |
--nearest nbd|pbd |
İleri ya da geri en yakın iş günü; geçerli gün zaten iş günüyse o da dahil.
--calendar gerektirir. |
--to-zone +HH:MM |
Bir adım: aynı anı başka bir sabit kaymada yeniden ifade eder. An korunur, yani
epoch değeri değişmez, yalnızca sivil alanlar değişir. --zone ile
karıştırılmamalıdır. |
--zone +HH:MM |
Oturum dilimi; today ve now’u çözümlemek ve sonucu göstermek
için kullanılır. Verilmezse ana makinenin dilimi. |
--calendar us-banking|us-federal|pl |
Bir tatil takvimi yükler. Meta verilere iş günü ve tatil ekler ve bd
ile --nearest’i etkinleştirir. İki Amerikan takvimi, hafta sonuna denk
gelen bir tatili nasıl gözlemlediklerinde ayrılır; bu da bir testin bulması gereken
tam olarak bir gün kayma türü hatadır. Her takvim belirli bir yıl aralığı için yanıt
verir: pl 2002'den, us-federal 1960'tan ve
us-banking 2008'den başlar. Bu aralıktan önceki bir güne ulaşan iş günü
adımı 1 koduyla reddedilir, aralıktan önceki bir tarih de değerlendirilmemiş olarak
gösterilir. Bir takvimin tatilleri en son bir yıldan uzun süre önce yasayla
karşılaştırılmışsa, değerlendirdiği daha sonraki gün calendar_outdated
ile işaretlenir, çünkü daha yeni bir tatil eksik olabilir. |
--preset <id> --param id=value |
presets/<id>.json dosyasından, parametreleri doldurulmuş adlandırılmış
bir an. Adım bayrakları ve --analyze ile birlikte kullanılamaz;
--calendar, --zone ve --format ile birleşir. |
--analyze <date> |
Yapıştırılmış bir tarihi geri okur ve ne olduğunu söyler. Belirsiz bir
04/08 tahmin edilmek yerine her iki okumasıyla, Amerikan ve
Polonya, gösterilir - bu belirsizlik yanlış hata raporlarının gerçek bir kaynağıdır. |
--format <mask> |
Sonucu ayrıca kendi maskenizle yazdırır; böylece test edilen uygulamanın biçimiyle
eşleşir: yyyy-MM-dd HH:mm:ss. Belirteçler .NET ve Java anlamında büyük/küçük
harfe duyarlıdır - M ay, m dakikadır. |
--json |
Yukarıdakilerden herhangi biri için makine çıktısı (chronomock.calc/1);
böylece bir pipeline bir tarihi hesaplayıp doğrudan chrono run’a geri
besleyebilir. |
# Çeyreğin son iş günü, Amerikan bankacılık takvimi chrono calc --base today --snap eoq --nearest pbd --calendar us-banking
chrono calc - çıkış kodları
Ayrı, daha küçük bir tablo: hesap makinesinin bildireceği bir kapsama kararı yoktur.
| Kod | Anlamı |
|---|---|
| 0 | hesaplandı |
| 1 | kullanım hatası - hatalı bir bayrak, imkânsız bir tarih, aralık taşması ya da içinde hiç iş günü bulunmayan bir takvim dosyası |
| 5 | adım ya da birim bu sürümde derlenmemiş ya da adım, vermediğiniz bir takvim gerektiriyor. Bir betik “henüz değil” ile “yanlış” arasındaki farkı ayırt edebilsin diye bilerek kullanım hatasından ayrı tutulmuştur |