Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
3ea2d77dffca0d92fb8b025e1dc6b58280b277f3
[simgrid.git] / src / mc / mc_record.h
1 /* Copyright (c) 2014. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 /** \file
8  *  This file contains the MC replay/record functionnality.
9  *  A MC path may be recorded by using ``-cfg=model-check/record:1`'`.
10  *  The path is written in the log output and an be replayed with MC disabled
11  *  (even with an non-LC build) with `--cfg=model-check/replay:$replayPath`.
12  *
13  *  The same version of Simgrid should be used and the same arguments should be
14  *  passed to the application (without the MC specific arguments).
15  */
16
17 #ifndef MC_RECORD_H
18 #define MC_RECORD_H
19
20 #include <stdbool.h>
21
22 #include "simgrid_config.h"
23
24 SG_BEGIN_DECL()
25
26 /** Whether the MC record mode is enabled
27  *
28  *  The behaviour is not changed. The only real difference is that
29  *  the path is writtent in the log when an interesting path is found.
30  */
31 #define MC_record_is_active() _sg_do_model_check_record
32
33 // **** Data conversion
34
35 /** An element in the recorded path
36  *
37  *  At each decision point, we need to record which process transition
38  *  is trigerred and potentially which value is associated with this
39  *  transition. The value is used to find which communication is triggerred
40  *  in things like waitany and for associating a given value of MC_random()
41  *  calls.
42  */
43 typedef struct s_mc_record_item {
44   int pid;
45   int value;
46 } s_mc_record_item_t, *mc_record_item_t;
47
48 /** Convert a string representation of the path into a array of `s_mc_record_item_t`
49  */
50 xbt_dynar_t MC_record_from_string(const char* data);
51
52 /** Generate a string representation
53 *
54 * The current format is a ";"-delimited list of pairs:
55 * "pid0,value0;pid2,value2;pid3,value3". The value can be
56 * omitted is it is null.
57 */
58 char* MC_record_stack_to_string(xbt_fifo_t stack);
59
60 /** Dump the path represented by a given stack in the log
61  */
62 void MC_record_dump_path(xbt_fifo_t stack);
63
64 // ***** Replay
65
66 /** Replay a path represented by the record items
67  *
68  *  \param start Array of record item
69  *  \item  count Number of record items
70  */
71 void MC_record_replay(mc_record_item_t start, size_t count);
72
73 /** Replay a path represented by a string
74  *
75  *  \param data String representation of the path
76  */
77 void MC_record_replay_from_string(const char* data);
78
79 void MC_record_replay_init(void);
80
81 SG_END_DECL()
82
83 #endif