1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ 2 /* 3 debugger.h 4 Copyright (C) Naba Kumar <naba@gnome.org> 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 #ifndef __DEBUGGER_H__ 21 #define __DEBUGGER_H__ 22 23 #include <sys/types.h> 24 #include <glib-object.h> 25 #include <gtk/gtk.h> 26 #include "gdbmi.h" 27 28 #include "preferences.h" 29 30 #include <libanjuta/interfaces/ianjuta-message-view.h> 31 #include <libanjuta/interfaces/ianjuta-debugger.h> 32 #include <libanjuta/interfaces/ianjuta-debugger-breakpoint.h> 33 #include <libanjuta/interfaces/ianjuta-debugger-memory.h> 34 #include <libanjuta/interfaces/ianjuta-debugger-instruction.h> 35 #include <libanjuta/interfaces/ianjuta-debugger-variable.h> 36 37 G_BEGIN_DECLS 38 39 typedef struct _Debugger Debugger; 40 typedef struct _DebuggerClass DebuggerClass; 41 typedef struct _DebuggerPriv DebuggerPriv; 42 typedef struct _DebuggerCommand DebuggerCommand; 43 44 #define DEBUGGER_TYPE (debugger_get_type ()) 45 #define DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DEBUGGER_TYPE, Debugger)) 46 #define DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DEBUGGER_TYPE, DebuggerClass)) 47 #define IS_DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DEBUGGER_TYPE)) 48 #define IS_DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DEBUGGER_TYPE)) 49 50 typedef enum 51 { 52 DEBUGGER_BREAKPOINT, 53 } DebuggerBreakpointType; 54 55 typedef void (*DebuggerParserFunc) (Debugger *debugger, 56 const GDBMIValue *mi_result, 57 const GList *cli_result, 58 GError* error); 59 60 typedef enum 61 { 62 DEBUGGER_COMMAND_NO_ERROR = 1 << 0, 63 DEBUGGER_COMMAND_KEEP_RESULT = 1 << 1, 64 DEBUGGER_COMMAND_PREPEND = 1 << 2, 65 } DebuggerCommandFlags; 66 67 68 struct _DebuggerCommand 69 { 70 gchar *cmd; 71 DebuggerCommandFlags flags; 72 DebuggerParserFunc parser; 73 IAnjutaDebuggerCallback callback; 74 gpointer user_data; 75 }; 76 77 struct _Debugger 78 { 79 GObject parent; 80 DebuggerPriv *priv; 81 }; 82 83 struct _DebuggerClass 84 { 85 GObjectClass parent_class; 86 }; 87 88 GType debugger_get_type (void); 89 90 Debugger* debugger_new (GtkWindow *parent_win, GObject* instance); 91 void debugger_free (Debugger *debugger); 92 93 gboolean debugger_set_pretty_printers (Debugger *debugger, 94 const GList *pretty_printers); 95 96 gboolean debugger_start (Debugger *debugger, 97 const GList *search_dirs, 98 const gchar *prog, 99 gboolean is_libtool_prog); 100 101 gboolean debugger_stop (Debugger *debugger); 102 gboolean debugger_abort (Debugger *debugger); 103 104 void debugger_set_output_callback (Debugger *debugger, IAnjutaDebuggerOutputCallback callback, gpointer user_data); 105 106 /* Status */ 107 gboolean debugger_is_ready (Debugger *debugger); 108 gboolean debugger_program_is_running (Debugger *debugger); 109 gboolean debugger_program_is_attached (Debugger *debugger); 110 gboolean debugger_program_is_loaded (Debugger *debugger); 111 IAnjutaDebuggerState debugger_get_state (Debugger *debugger); 112 113 /* Send standard gdb MI2 or CLI commands */ 114 void debugger_command (Debugger *debugger, const gchar *command, 115 gboolean suppress_error, DebuggerParserFunc parser, 116 gpointer user_data); 117 118 void debugger_program_moved (Debugger *debugger, const gchar *file, 119 gint line, gulong address); 120 gchar* debugger_get_source_path (Debugger *debugger, const gchar *file); 121 122 /* Program loading */ 123 void debugger_load_executable (Debugger *debugger, const gchar *prog); 124 void debugger_load_core (Debugger *debugger, const gchar *core); 125 void debugger_attach_process (Debugger *debugger, pid_t pid); 126 void debugger_detach_process (Debugger *debugger); 127 128 /* Environment */ 129 gboolean debugger_set_working_directory (Debugger *debugger, const gchar *directory); 130 gboolean debugger_set_environment (Debugger *debugger, gchar **variables); 131 132 /* Execution */ 133 void debugger_start_program (Debugger *debugger, const gchar *server, const gchar* args, const gchar* tty, gboolean stop); 134 void debugger_stop_program (Debugger *debugger); 135 void debugger_restart_program (Debugger *debugger); 136 void debugger_interrupt (Debugger *debugger); 137 void debugger_run (Debugger *debugger); 138 void debugger_step_in (Debugger *debugger); 139 void debugger_step_over (Debugger *debugger); 140 void debugger_step_out (Debugger *debugger); 141 void debugger_stepi_in (Debugger *debugger); 142 void debugger_stepi_over (Debugger *debugger); 143 void debugger_run_to_location (Debugger *debugger, const gchar *loc); 144 void debugger_run_to_position (Debugger *debugger, const gchar *file, guint line); 145 void debugger_run_from_position (Debugger *debugger, const gchar *file, guint line); 146 void debugger_run_to_address (Debugger *debugger, gulong address); 147 void debugger_run_from_address (Debugger *debugger, gulong address); 148 149 /* Breakpoint */ 150 void debugger_add_breakpoint_at_line (Debugger *debugger, const gchar* file, guint line, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 151 void debugger_add_breakpoint_at_function (Debugger *debugger, const gchar* file, const gchar* function, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 152 void debugger_add_breakpoint_at_address (Debugger *debugger, gulong address, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 153 void debugger_remove_breakpoint (Debugger *debugger, guint id, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 154 void debugger_list_breakpoint (Debugger *debugger, IAnjutaDebuggerGListCallback callback, gpointer user_data); 155 void debugger_enable_breakpoint (Debugger *debugger, guint id, gboolean enable, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 156 void debugger_ignore_breakpoint (Debugger *debugger, guint id, guint ignore, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 157 void debugger_condition_breakpoint (Debugger *debugger, guint id, const gchar* condition, IAnjutaDebuggerBreakpointCallback callback, gpointer user_data); 158 159 /* Variable */ 160 void debugger_print (Debugger *debugger, const gchar* variable, IAnjutaDebuggerGCharCallback callback, gpointer user_data); 161 void debugger_evaluate (Debugger *debugger, const gchar* name, IAnjutaDebuggerGCharCallback callback, gpointer user_data); 162 163 /* Info */ 164 void debugger_list_local (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 165 void debugger_list_argument (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 166 void debugger_info_signal (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 167 void debugger_info_sharedlib (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 168 void debugger_inspect_memory (Debugger *debugger, gulong address, guint length, IAnjutaDebuggerMemoryCallback func, gpointer user_data); 169 void debugger_disassemble (Debugger *debugger, gulong address, guint length, IAnjutaDebuggerInstructionCallback func, gpointer user_data); 170 171 /* Register */ 172 173 void debugger_list_register (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 174 void debugger_update_register (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 175 void debugger_write_register (Debugger *debugger, const gchar *name, const gchar *value); 176 177 /* Stack */ 178 void debugger_list_argument (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 179 void debugger_list_frame (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 180 void debugger_set_frame (Debugger *debugger, gsize frame); 181 void debugger_dump_stack_trace (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 182 183 /* Thread */ 184 void debugger_list_thread (Debugger *debugger, IAnjutaDebuggerGListCallback func, gpointer user_data); 185 void debugger_set_thread (Debugger *debugger, gint thread); 186 void debugger_info_thread (Debugger *debugger, gint thread, IAnjutaDebuggerGListCallback func, gpointer user_data); 187 188 /* Log */ 189 void debugger_set_log (Debugger *debugger, IAnjutaMessageView *view); 190 191 /* Variable object */ 192 void debugger_delete_variable (Debugger *debugger, const gchar *name); 193 void debugger_evaluate_variable (Debugger *debugger, const gchar *name, IAnjutaDebuggerGCharCallback callback, gpointer user_data); 194 void debugger_assign_variable (Debugger *debugger, const gchar *name, const gchar *value); 195 void debugger_list_variable_children (Debugger *debugger, const gchar* name, guint from, IAnjutaDebuggerGListCallback callback, gpointer user_data); 196 void debugger_create_variable (Debugger *debugger, const gchar *name, IAnjutaDebuggerVariableCallback callback, gpointer user_data); 197 void debugger_update_variable (Debugger *debugger, IAnjutaDebuggerGListCallback callback, gpointer user_data); 198 199 #if 0 200 201 /* Evaluations */ 202 void debugger_query_execute (void); 203 void debugger_query_evaluate_expr_tip (const gchar *expr, 204 DebuggerFunc parser, 205 gpointer data); 206 void debugger_query_evaluate_expr (const gchar *expr, 207 DebuggerFunc parser, 208 gpointer data); 209 #endif 210 211 G_END_DECLS 212 213 #endif 214