public static void PrintZingerHelp(string arg, string errorMessage)
{
if (errorMessage != null)
{
if (arg != null)
ZingerUtilities.PrintErrorMessage(String.Format("Error: \"{0}\" - {1}", arg, errorMessage));
else
ZingerUtilities.PrintErrorMessage(String.Format("Error: {0}", errorMessage));
}
Console.WriteLine("Usage: zinger [options] <ZingModel>");
Console.WriteLine("-h | -? display this message (-h or -?)");
Console.WriteLine("===========================");
Console.WriteLine("Iterative Bounding Options:");
Console.WriteLine("---------------------------");
Console.WriteLine("-fBound:<int>");
Console.WriteLine("Final Cutoff or Maximum bound in the case of depth or delay bounding. Default value is (int max)\n");
Console.WriteLine("-iBound:<int>");
Console.WriteLine("Iterative increment bound in the case of depth or delay bounding. Default value is 1\n");
Console.WriteLine();
Console.WriteLine("===========================");
Console.WriteLine("Zinger Configuration:");
Console.WriteLine("---------------------------");
Console.WriteLine("-p | -p:<n>");
Console.WriteLine("Degree of Parallelism during Search. -p would create no_of_worker_threads = no_of_cores.");
Console.WriteLine("You can control the degree of parallelism by using -p:<n>, in that case no_of_worker_threads = n\n");
Console.WriteLine("-m | -multiple");
Console.WriteLine("Find all bugs in the model. Dont stop exploration after finding first bug.\n");
Console.WriteLine("-s | -stats");
Console.WriteLine("Print Search Statistics after each Iterative Bound\n");
Console.WriteLine("-et:<filename>");
Console.WriteLine("Dump the generated (only trace statements) Zing error trace in file.\n");
Console.WriteLine("-entireZingTrace");
Console.WriteLine("Genererates detailed Zing Stack Error trace.\n");
Console.WriteLine();
Console.WriteLine("-timeout:<time in seconds>");
Console.WriteLine("Maximum amount of time to run zinger. Zinger will be terminated after time-out period");
Console.WriteLine();
Console.WriteLine("===========================");
Console.WriteLine("Zinger Optimizations:");
Console.WriteLine("---------------------------");
Console.WriteLine("-ct");
Console.WriteLine("Use trace compaction, steps from states that have single successor are not stored.\n");
Console.WriteLine("-frontiersToDisk");
Console.WriteLine("Dump frontier states after each iteration into files on disk.");
Console.WriteLine("This option should be used when you dont want store frontiers in memory.");
Console.WriteLine("The search will be severely slowed down because of disk access but memory consumption is minimal\n");
Console.WriteLine("-co:n");
Console.WriteLine("Fingerprint states having single successor with probability n/1000000 <default n = 0>.\n");
Console.WriteLine("-maxMemory:<double>GB");
Console.WriteLine("Maximum memory consumption during stateful search. After process consumes 70% ofmax_size (e.g. 2GB).");
Console.WriteLine("States are randomly replaced from the state table and frontiers are stored on disk.\n");
Console.WriteLine();
Console.WriteLine("===========================");
Console.WriteLine("Zinger Search Strategy:");
Console.WriteLine("---------------------------");
Console.WriteLine("-maxDFSStack:<int>");
Console.WriteLine("Maximum size of the DFS search stack. A counter example is generated if size of the stack exceeds the bound.\n");
Console.WriteLine("-randomsample:(numOfSchedulesPerIteration,maxDepth)");
Console.WriteLine("Zinger performs random walk without DFS stack. default is (1000,600).\n");
Console.WriteLine("-pb");
Console.WriteLine("Perform preemption bounding\n");
Console.WriteLine("-sched:<scheduler.dll>");
Console.WriteLine("Zinger performs delay bounding using the deterministic scheduler (scheduler.dll).\n");
Console.WriteLine("-bc:<int>");
Console.WriteLine("Bound the choice operations or bound the number of times choose(bool) returns true.");
Console.WriteLine("The default value is \"false\" for choose(bool), choice budget is used each time true is returned.\n");
Console.WriteLine("-depthb");
Console.WriteLine("Perform iterative depth bounding (default is delay bounded search)");
Console.WriteLine();
Console.WriteLine("===========================");
Console.WriteLine("Zinger Search Strategy For Liveness:");
Console.WriteLine("---------------------------");
Console.WriteLine("-NDFSliveness");
Console.WriteLine("To perform liveness search using NDFS <use only with sequential and non-iterative>\n");
Console.WriteLine("-randomliveness");
Console.WriteLine("This option uses random search based liveness algorithm.");
Console.WriteLine("It performs random search untill it finds a cycles in the execution.");
/*Console.WriteLine("-MAPLiveness");
Console.WriteLine("Uses MAP cycle detection algorithm for finding accepting cycles. Can be used with Parallelism.\n");*/
Console.WriteLine("===============================");
Console.WriteLine("Zinger Plugin:");
Console.WriteLine("-------------------------------");
Console.WriteLine("-plugin:<plugin.dll>");
}