about summary refs log tree commit diff homepage
path: root/www/klee-options.html
blob: 22871e0e76aa847d72dc286c5b33e5b1b84b6366 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
          "http://www.w3.org/TR/html4/strict.dtd">
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
<html>
<head>
  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>The KLEE Symbolic Virtual Machine</title>
  <link type="text/css" rel="stylesheet" href="menu.css">
  <link type="text/css" rel="stylesheet" href="content.css">
</head>
<body>
<!--#include virtual="menu.html.incl"-->
<div id="content">
  <!--*********************************************************************-->
  <h1>KLEE Options</h1>
  <!--*********************************************************************-->

  <h2>Search Heuristics</h2> 

  <h3>Main search heuristics</h3>

  <p>
  KLEE provides four main search heuristics:
  <ol>
    <li><b>Depth-First Search (DFS):</b> Traverses states in depth-first order.</li>
    <li><b>Random State Search:</b>Randomly selects a state to explore.</li>
    <li><b>Random Path Selection:</b> Described in our <a href="http://www.doc.ic.ac.uk/~cristic/papers/klee-osdi-08.pdf">KLEE OSDI'08</a> paper.</li>
    <li><b>Non Uniform Random Search (NURS):</b> Selects a state randomly according to a given distribution.  The distribution can be based on the minimum distance to an uncovered instruction (MD2U), the query cost, etc.  
  </ol>
  
  To select a search heuristic, use the <b>--search</b> option provided by KLEE.  For example:
    <pre class="output">
    $ klee --search=dfs demo.o</pre>

    runs <i>demo.o</i> using DFS, while
    <pre class="output">
    $ klee --search=random-path demo.o </pre>
    runs it using the random path selection strategy. 

    The full list of options is shown in KLEE's help message:
    <pre class="output">
    $ klee --help
    -search                                 - Specify the search heuristic (default=random-path interleaved with nurs:covnew)
      =dfs                                  -   use Depth First Search (DFS)
      =random-state                         -   randomly select a state to explore
      =random-path                          -   use Random Path Selection (see OSDI'08 paper)
      =nurs:covnew                          -   use Non Uniform Random Search (NURS) with Coverage-New heuristic
      =nurs:md2u                            -   use NURS with Min-Dist-to-Uncovered heuristic
      =nurs:depth                           -   use NURS with 2^depth heuristic
      =nurs:icnt                            -   use NURS with Instr-Count heuristic
      =nurs:cpicnt                          -   use NURS with CallPath-Instr-Count heuristic
      =nurs:qc                              -   use NURS with Query-Cost heuristic   </pre>
    

  <h3>Interleaving search heuristics</h3>
  <p>
    Search heuristics in KLEE can be interleaved in a round-robin
    fashion.  To interleave several search heuristics to be interleaved, use the <b>--search</b> multiple times.  For example:
    <pre class="output">
    $ klee --search=random-state --search=nurs:md2u demo.o </pre>
    interleaves the Random State and the NURS:MD2U heuristics in a round robin fashion.
    <br/>
    </p>
  

  <h3>Default search heuristics</h3>
  <p>
    The default heuristics used by KLEE are <i>random-path</i> interleaved with <i>nurs:covnew</i>.
  </p>
    
</div>
</body>
</html>