Configuration¶
CLI Syntax¶
$ perlchecker check FILE.pl [OPTIONS]
Options¶
Option |
Default |
Description |
|---|---|---|
|
|
Maximum number of times each loop is unrolled. Higher values let you verify loops that iterate more times but increase path count and verification time. |
|
|
Maximum number of distinct symbolic execution paths per function. Verification aborts with an error if this limit is exceeded. |
|
|
Z3 solver timeout in milliseconds per query. If the solver does not
return within this time, the result is |
Environment Variables¶
Variable |
Description |
|---|---|
|
Controls tracing output. Values: |
Internal Limits¶
These are not configurable via the CLI:
Limit |
Value |
Description |
|---|---|---|
|
|
Maximum string length in the SMT model. Strings longer than 32 characters cannot be reasoned about. |
Tuning Guidance¶
When to increase ``–max_loop_unroll``:
If you see “exceeded loop unroll bound on a feasible path”, your loop iterates more than the default 5 times. Increase the bound and tighten the precondition so the loop terminates within the new bound.
$ perlchecker check file.pl --max_loop_unroll 10
When to increase ``–max_paths``:
If you see “exceeded maximum number of symbolic paths”, the function has
too many branches. Each if/else doubles the path count. For
example, 11 independent if/else blocks produce 2048 paths.
$ perlchecker check file.pl --max_paths 4096
When to increase ``–solver_timeout_ms``:
If you see “solver returned unknown”, the Z3 solver timed out on a complex query. This can happen with deep string manipulation or large array operations.
$ perlchecker check file.pl --solver_timeout_ms 30000