WiP
[oweals/gnunet.git] / src / monkey / gnunet_monkey_action.h
1 /*
2       This file is part of GNUnet
3       (C) 2010, 2011 Christian Grothoff (and other contributing authors)
4
5       GNUnet is free software; you can redistribute it and/or modify
6       it under the terms of the GNU General Public License as published
7       by the Free Software Foundation; either version 3, or (at your
8       option) any later version.
9
10       GNUnet is distributed in the hope that it will be useful, but
11       WITHOUT ANY WARRANTY; without even the implied warranty of
12       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13       General Public License for more details.
14
15       You should have received a copy of the GNU General Public License
16       along with GNUnet; see the file COPYING.  If not, write to the
17       Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18       Boston, MA 02111-1307, USA.
19  */
20
21 /**
22  * @file monkey/gnunet_monkey_action.h
23  * @brief Monkey API for actions taken by Monkey while debugging
24  */
25
26 #ifndef GNUNET_MONKEY_ACTION_H
27 #define GNUNET_MONKEY_ACTION_H
28
29 #include "gdbmi.h"
30
31 #ifdef __cplusplus
32 extern "C"
33 {
34 #if 0                           /* keep Emacsens' auto-indent happy */
35 }
36 #endif
37 #endif
38
39
40 /* Debug constants */
41 #define DEBUG_MODE_GDB 0
42 #define GDB_STATE_STOPPED 1
43 #define GDB_STATE_EXIT_NORMALLY 2
44 #define GDB_STATE_ERROR 3
45 #define DEBUG_MODE_VALGRIND 4
46 #define DEBUG_MODE_REPORT_READY 5
47
48
49 /**
50  * Context for the Action API
51  */
52 struct GNUNET_MONKEY_ACTION_Context
53 {
54         const char* binary_name;
55         const char* email_address;
56         const char* expression_database_path;
57         const char* gdb_binary_path;
58         int debug_mode;
59         char* debug_report;
60
61         /* gdb debugging attributes */
62         mi_h *gdb_handle;
63         const char* gdb_in_use;
64         mi_stop* gdb_stop_reason;
65         mi_frames* gdb_frames;
66 };
67
68
69 int GNUNET_MONKEY_ACTION_report_file(struct GNUNET_MONKEY_ACTION_Context* cntxt, const char* dumpFileName);
70 int GNUNET_MONKEY_ACTION_report_email(struct GNUNET_MONKEY_ACTION_Context* cntxt);
71 int GNUNET_MONKEY_ACTION_rerun_with_valgrind(void);
72 int GNUNET_MONKEY_ACTION_inspect_expression_database(struct GNUNET_MONKEY_ACTION_Context* cntxt);
73 int GNUNET_MONKEY_ACTION_rerun_with_gdb(struct GNUNET_MONKEY_ACTION_Context* cntxt);
74 int GNUNET_MONKEY_ACTION_format_report(struct GNUNET_MONKEY_ACTION_Context* cntxt);
75 int GNUNET_MONKEY_ACTION_check_bug_redundancy(void);
76
77
78 #if 0                           /* keep Emacsens' auto-indent happy */
79 {
80 #endif
81 #ifdef __cplusplus
82 }
83 #endif
84 #endif