[geany/geany-plugins] c5ec89: Debugger: Move debug output accessing after check whether err != Null (#511)
Frank Lanitz
git-noreply at xxxxx
Sun Dec 18 10:02:22 UTC 2016
Branch: refs/heads/master
Author: Frank Lanitz <frank at frank.uvena.de>
Committer: GitHub <noreply at github.com>
Date: Sun, 18 Dec 2016 10:02:22 UTC
Commit: c5ec8911ecbd09ffa6e513ce19d3c34ea3340b6c
https://github.com/geany/geany-plugins/commit/c5ec8911ecbd09ffa6e513ce19d3c34ea3340b6c
Log Message:
-----------
Debugger: Move debug output accessing after check whether err != Null (#511)
Modified Paths:
--------------
debugger/src/dbm_gdb.c
Modified: debugger/src/dbm_gdb.c
164 lines changed, 84 insertions(+), 80 deletions(-)
===================================================================
@@ -1,18 +1,18 @@
/*
* dbm_gdm.c
- *
+ *
* Copyright 2010 Alexander Petukhov <devel(at)apetukhov.ru>
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
@@ -144,7 +144,7 @@ static void colorize_message(gchar *message)
color = "grey";
else
color = "red";
-
+
dbg_cbs->send_message(message, color);
}
@@ -175,25 +175,25 @@ static void on_gdb_exit(GPid pid, gint status, gpointer data)
g_spawn_close_pid(pid);
shutdown_channel(&gdb_ch_in);
shutdown_channel(&gdb_ch_out);
-
+
/* delete autos */
g_list_foreach(autos, (GFunc)g_free, NULL);
g_list_free(autos);
autos = NULL;
-
+
/* delete watches */
g_list_foreach(watches, (GFunc)g_free, NULL);
g_list_free(watches);
watches = NULL;
-
+
/* delete files */
g_list_foreach(files, (GFunc)g_free, NULL);
g_list_free(files);
files = NULL;
-
+
g_source_remove(gdb_src_id);
gdb_src_id = 0;
-
+
dbg_cbs->set_exited(0);
}
@@ -214,12 +214,12 @@ static GList* read_until_prompt(void)
line[terminator] = '\0';
lines = g_list_prepend (lines, line);
}
-
+
return g_list_reverse(lines);
}
/*
- * write a command to a gdb channel and flush with a newlinw character
+ * write a command to a gdb channel and flush with a newlinw character
*/
static void gdb_input_write_line(const gchar *line)
{
@@ -229,34 +229,38 @@ static void gdb_input_write_line(const gchar *line)
const char *p;
char command[1000];
g_snprintf(command, sizeof command, "%s\n", line);
-
+
for (p = command; *p; p += count)
{
st = g_io_channel_write_chars(gdb_ch_in, p, strlen(p), &count, &err);
if (err || (st == G_IO_STATUS_ERROR) || (st == G_IO_STATUS_EOF))
{
+ if (err)
+ {
#ifdef DEBUG_OUTPUT
- dbg_cbs->send_message(err->message, "red");
+ dbg_cbs->send_message(err->message, "red");
#endif
- if (err)
g_clear_error(&err);
+ }
break;
}
}
st = g_io_channel_flush(gdb_ch_in, &err);
if (err || (st == G_IO_STATUS_ERROR) || (st == G_IO_STATUS_EOF))
{
-#ifdef DEBUG_OUTPUT
- dbg_cbs->send_message(err->message, "red");
-#endif
if (err)
+ {
+ #ifdef DEBUG_OUTPUT
+ dbg_cbs->send_message(err->message, "red");
+ #endif
g_clear_error(&err);
+ }
}
}
/*
- * free memory occupied by a queue item
+ * free memory occupied by a queue item
*/
static void free_queue_item(queue_item *item)
{
@@ -267,7 +271,7 @@ static void free_queue_item(queue_item *item)
}
/*
- * free a list of "queue_item" structures
+ * free a list of "queue_item" structures
*/
static void free_commands_queue(GList *queue)
{
@@ -278,7 +282,7 @@ static void free_commands_queue(GList *queue)
}
/*
- * add a new command ("queue_item" structure) to a list
+ * add a new command ("queue_item" structure) to a list
*/
static GList* add_to_queue(GList* queue, const gchar *message, const gchar *command, const gchar *error_message, gboolean format_error_message)
{
@@ -292,7 +296,7 @@ static GList* add_to_queue(GList* queue, const gchar *message, const gchar *comm
item->format_error_message = format_error_message;
return g_list_append(queue, (gpointer)item);
-}
+}
/*
* asyncronous output reader
@@ -305,9 +309,9 @@ static gboolean on_read_async_output(GIOChannel * src, GIOCondition cond, gpoint
gchar *line;
gsize length;
struct gdb_mi_record *record;
-
+
if (G_IO_STATUS_NORMAL != g_io_channel_read_line(src, &line, NULL, &length, NULL))
- return TRUE;
+ return TRUE;
record = gdb_mi_record_parse(line);
@@ -386,7 +390,7 @@ static gboolean on_read_async_output(GIOChannel * src, GIOCondition cond, gpoint
dbg_cbs->report_error(item->error_message);
}
}
-
+
/* free commands queue */
free_commands_queue(commands);
@@ -411,9 +415,9 @@ static gboolean on_read_from_gdb(GIOChannel * src, GIOCondition cond, gpointer d
gsize length;
const gchar *id;
struct gdb_mi_record *record;
-
+
if (G_IO_STATUS_NORMAL != g_io_channel_read_line(src, &line, NULL, &length, NULL))
- return TRUE;
+ return TRUE;
record = gdb_mi_record_parse(line);
@@ -493,7 +497,7 @@ static gboolean on_read_from_gdb(GIOChannel * src, GIOCondition cond, gpointer d
/* somehow, sometimes there can be no stop reason */
stop_reason = SR_EXITED_NORMALLY;
}
-
+
if (SR_BREAKPOINT_HIT == stop_reason || SR_END_STEPPING_RANGE == stop_reason || SR_SIGNAL_RECIEVED == stop_reason)
{
const gchar *thread_id = gdb_mi_result_var(record->first, "thread-id", GDB_MI_VAL_STRING);
@@ -596,7 +600,7 @@ static gboolean on_read_from_gdb(GIOChannel * src, GIOCondition cond, gpointer d
* after writing command to an input channel
* connects reader to output channel and exits
* after execution
- */
+ */
static void exec_async_command(const gchar* command)
{
#ifdef DEBUG_OUTPUT
@@ -613,7 +617,7 @@ static void exec_async_command(const gchar* command)
* execute "command" syncronously
* i.e. reading output right
* after execution
- */
+ */
static result_class exec_sync_command(const gchar* command, gboolean wait4prompt, struct gdb_mi_record ** command_record)
{
GList *lines, *iter;
@@ -625,10 +629,10 @@ static result_class exec_sync_command(const gchar* command, gboolean wait4prompt
/* write command to gdb input channel */
gdb_input_write_line(command);
-
+
if (!wait4prompt)
return RC_DONE;
-
+
if (command_record)
*command_record = NULL;
@@ -657,7 +661,7 @@ static result_class exec_sync_command(const gchar* command, gboolean wait4prompt
/* save error message */
const gchar *msg = gdb_mi_result_var(record->first, "msg", GDB_MI_VAL_STRING);
strncpy(err_message, msg ? msg : "", G_N_ELEMENTS(err_message) - 1);
-
+
rc = RC_ERROR;
}
else if (gdb_mi_record_matches(record, '^', "exit", NULL))
@@ -675,10 +679,10 @@ static result_class exec_sync_command(const gchar* command, gboolean wait4prompt
}
gdb_mi_record_free(record);
}
-
+
g_list_foreach(lines, (GFunc)g_free, NULL);
g_list_free(lines);
-
+
return rc;
}
@@ -737,11 +741,11 @@ static gboolean run(const gchar* file, const gchar* commandline, GList* env, GLi
}
g_free(working_directory);
g_strfreev(gdb_env);
-
+
/* move gdb to it's own process group */
setpgid(gdb_pid, 0);
-
- /* set handler for gdb process exit event */
+
+ /* set handler for gdb process exit event */
gdb_src_id = g_child_watch_add(gdb_pid, on_gdb_exit, NULL);
/* create GDB GIO chanels */
@@ -768,7 +772,7 @@ static gboolean run(const gchar* file, const gchar* commandline, GList* env, GLi
variable *var = variable_new(name, VT_WATCH);
watches = g_list_append(watches, var);
-
+
witer = witer->next;
}
@@ -889,7 +893,7 @@ static void restart(void)
dbg_cbs->clear_messages();
exec_async_command("-exec-run");
}
-
+
/*
* stops GDB
*/
@@ -964,7 +968,7 @@ static int get_break_number(char* file, int line)
if (! number || ! location)
continue;
-
+
colon = strrchr(location, ':');
if (colon && atoi(colon + 1) == line)
{
@@ -984,9 +988,9 @@ static int get_break_number(char* file, int line)
break;
}
}
-
+
gdb_mi_record_free(record);
-
+
return break_number;
}
@@ -1045,7 +1049,7 @@ static gboolean set_break(breakpoint* bp, break_set_activity bsa)
g_snprintf(command, sizeof command, "-break-disable %i", num);
exec_sync_command(command, TRUE, NULL);
}
-
+
return TRUE;
}
else
@@ -1064,7 +1068,7 @@ static gboolean set_break(breakpoint* bp, break_set_activity bsa)
return RC_DONE == exec_sync_command(command, TRUE, NULL);
}
-
+
return FALSE;
}
@@ -1082,7 +1086,7 @@ static gboolean remove_break(breakpoint* bp)
g_snprintf(command, sizeof command, "-break-delete %i", number);
rc = exec_sync_command(command, TRUE, NULL);
-
+
return RC_DONE == rc;
}
return FALSE;
@@ -1177,7 +1181,7 @@ static GList* get_stack(void)
{
f->file = g_strdup("");
}
-
+
/* whether source is available */
f->have_source = fullname ? TRUE : FALSE;
@@ -1187,19 +1191,19 @@ static GList* get_stack(void)
stack = g_list_prepend(stack, f);
}
gdb_mi_record_free(record);
-
+
return g_list_reverse(stack);
}
/*
- * updates variables from vars list
+ * updates variables from vars list
*/
static void get_variables (GList *vars)
{
while (vars)
{
gchar command[1000];
-
+
variable *var = (variable*)vars->data;
gchar *varname = var->internal->str;
@@ -1216,7 +1220,7 @@ static void get_variables (GList *vars)
expression = gdb_mi_result_var(record->first, "path_expr", GDB_MI_VAL_STRING);
g_string_assign(var->expression, expression ? expression : "");
gdb_mi_record_free(record);
-
+
/* children number */
g_snprintf(command, sizeof command, "-var-info-num-children \"%s\"", varname);
exec_sync_command(command, TRUE, &record);
@@ -1293,7 +1297,7 @@ static void update_files(void)
}
/*
- * updates watches list
+ * updates watches list
*/
static void update_watches(void)
{
@@ -1305,17 +1309,17 @@ static void update_watches(void)
for (iter = watches; iter; iter = iter->next)
{
variable *var = (variable*)iter->data;
-
+
if (var->internal->len)
{
g_snprintf(command, sizeof command, "-var-delete %s", var->internal->str);
exec_sync_command(command, TRUE, NULL);
}
-
+
/* reset all variables fields */
variable_reset(var);
}
-
+
/* create GDB variables, adding successfully created
variables to the list then passed for updatind */
for (iter = watches; iter; iter = iter->next)
@@ -1336,22 +1340,22 @@ static void update_watches(void)
var->evaluated = FALSE;
g_string_assign(var->internal, "");
gdb_mi_record_free(record);
-
+
continue;
}
-
+
/* find and assign internal name */
name = gdb_mi_result_var(record->first, "name", GDB_MI_VAL_STRING);
g_string_assign(var->internal, name ? name : "");
gdb_mi_record_free(record);
-
+
var->evaluated = name != NULL;
/* add to updating list */
updating = g_list_prepend(updating, var);
}
updating = g_list_reverse(updating);
-
+
/* update watches */
get_variables(updating);
@@ -1360,7 +1364,7 @@ static void update_watches(void)
}
/*
- * updates autos list
+ * updates autos list
*/
static void update_autos(void)
{
@@ -1371,17 +1375,17 @@ static void update_autos(void)
for (iter = autos; iter; iter = iter->next)
{
variable *var = (variable*)iter->data;
-
+
g_snprintf(command, sizeof command, "-var-delete %s", var->internal->str);
exec_sync_command(command, TRUE, NULL);
}
g_list_foreach(autos, (GFunc)variable_free, NULL);
g_list_free(autos);
autos = NULL;
-
+
/* add current autos to the list */
-
+
struct gdb_mi_record *record = NULL;
g_snprintf(command, sizeof command, "-stack-list-arguments 0 %i %i", active_frame, active_frame);
@@ -1443,45 +1447,45 @@ static void update_autos(void)
gdb_mi_record_free(create_record);
}
g_list_free(vars);
-
+
/* get values for the autos (without incorrect variables) */
get_variables(autos);
-
+
/* add incorrect variables */
autos = g_list_concat(autos, unevaluated);
}
/*
- * get autos list
+ * get autos list
*/
static GList* get_autos (void)
{
return g_list_copy(autos);
}
/*
- * get watches list
+ * get watches list
*/
static GList* get_watches (void)
{
return g_list_copy(watches);
}
/*
- * get files list
+ * get files list
*/
static GList* get_files (void)
{
return g_list_copy(files);
}
/*
- * get list of children
+ * get list of children
*/
static GList* get_children (gchar* path)
{
GList *children = NULL;
-
+
gchar command[1000];
result_class rc;
struct gdb_mi_record *record = NULL;
@@ -1501,7 +1505,7 @@ static GList* get_children (gchar* path)
gdb_mi_record_free(record);
if (!n)
return NULL;
-
+
/* recursive get children and put into list */
g_snprintf(command, sizeof command, "-var-list-children \"%s\"", path);
rc = exec_sync_command(command, TRUE, &record);
@@ -1525,15 +1529,15 @@ static GList* get_children (gchar* path)
}
}
gdb_mi_record_free(record);
-
+
children = g_list_reverse(children);
get_variables(children);
return children;
}
/*
- * add new watch
+ * add new watch
*/
static variable* add_watch(gchar* expression)
{
@@ -1556,7 +1560,7 @@ static variable* add_watch(gchar* expression)
gdb_mi_record_free(record);
return var;
}
-
+
name = gdb_mi_result_var(record->first, "name", GDB_MI_VAL_STRING);
g_string_assign(var->internal, name ? name : "");
var->evaluated = name != NULL;
@@ -1567,11 +1571,11 @@ static variable* add_watch(gchar* expression)
gdb_mi_record_free(record);
g_list_free(vars);
- return var;
+ return var;
}
/*
- * remove watch
+ * remove watch
*/
static void remove_watch(gchar* internal)
{
@@ -1614,7 +1618,7 @@ static gchar *evaluate_expression(gchar *expression)
}
/*
- * request GDB interrupt
+ * request GDB interrupt
*/
static gboolean request_interrupt(void)
{
@@ -1623,23 +1627,23 @@ static gboolean request_interrupt(void)
g_snprintf(msg, sizeof msg, "interrupting pid=%i", target_pid);
dbg_cbs->send_message(msg, "red");
#endif
-
+
requested_interrupt = TRUE;
kill(target_pid, SIGINT);
return TRUE;
}
/*
- * get GDB error messages
+ * get GDB error messages
*/
static gchar* error_message(void)
{
return err_message;
}
/*
- * define GDB debug module
+ * define GDB debug module
*/
DBG_MODULE_DEFINE(gdb);
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list