← Prev | Next → |
To compile with csi-cc, you must tell the compiler which tracing variants to create for each function. This page describes the methods for providing this data to csi-cc, and the format of the data.
If not otherwise specified, csi-cc will prompt the user for
tracing configuration (read from stdin) before compilation.
To specify a file containing appropriate tracing configuration, use the
--trace flag. For example, to instrument every function with
path tracing and call-site coverage, you can the pre-built file provided with
this release, as follows:
csi-cc --trace=cc_pt.schema <input file>
A description of tracing schemes and customization can be found in the journal paper associated with this code release [2]. In brief: each function in the original program has one or more possible sets of tracing mechanisms that it can have active during a run. Each such set is called a tracing “scheme.” For example, the aforementioned file cc_pt.schema encodes that all functions in the entire program have a single scheme: call-site coverage plus path tracing. Another provided example schema, realistic.schema, creates three different variants for each original function:
A tracing schema is composed of an ordered list of matching rules. Each function in the program is instrumented based on the first matching rule. For example, the following schema:
foo;{};{CC} *;{};{FC};{CC,PT}indicates that any function named foo will have two variants:
The format grammar follows. Non-terminals are distinguished from terminals by capitalization, color, and italics.
Rule_List | ⩴ | Rule ↵ Rule_List |
| | ε | |
Rule | ⩴ | fn-name ; Scheme_List |
| | * ; Scheme_List | |
Scheme_List | ⩴ | Scheme ; Scheme_List |
| | Scheme | |
Scheme | ⩴ | { Mechanism_List } |
| | { } | |
Mechanism_List | ⩴ | Mechanism , Mechanism_List |
| | Mechanism | |
Mechanism | ⩴ | BBC | CC | FC | PT |
← Prev | Next → |