1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 Copyright (C) 2007 Sébastien Granjoux
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.
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.
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
22 * Wrap each debugger commands in a command object put in a FIFO queue
23 *---------------------------------------------------------------------------*/
32 #include <libanjuta/anjuta-debug.h>
33 #include <libanjuta/interfaces/ianjuta-debugger-breakpoint.h>
34 #include <libanjuta/interfaces/ianjuta-cpu-debugger.h>
35 #include <libanjuta/interfaces/ianjuta-variable-debugger.h>
40 *---------------------------------------------------------------------------*/
43 *---------------------------------------------------------------------------*/
49 LOAD_COMMAND
, /* Debugger started */
51 QUIT_COMMAND
, /* Debugger started - Program stopped */
54 INSPECT_MEMORY_COMMAND
,
56 LIST_REGISTER_COMMAND
,
57 UNLOAD_COMMAND
, /* Program loaded */
59 BREAK_LINE_COMMAND
, /* Program loaded - Program stopped */
60 BREAK_FUNCTION_COMMAND
,
61 BREAK_ADDRESS_COMMAND
,
63 IGNORE_BREAK_COMMAND
, /* 0x10 */
64 CONDITION_BREAK_COMMAND
,
67 INFO_SHAREDLIB_COMMAND
,
71 STEP_IN_COMMAND
, /* Program stopped */
78 RUN_TO_ADDRESS_COMMAND
,
79 EXIT_COMMAND
, /* 0x20 */
80 HANDLE_SIGNAL_COMMAND
,
89 INFO_VARIABLES_COMMAND
,
92 UPDATE_REGISTER_COMMAND
,
93 WRITE_REGISTER_COMMAND
,
95 INSPECT_COMMAND
, /* 0x30 */
99 LIST_VARIABLE_CHILDREN
,
103 INTERRUPT_COMMAND
/* Program running */
104 } DmaDebuggerCommandType
;
108 DMA_CALLBACK_COMMAND
=
110 NEED_DEBUGGER_STOPPED
| NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
112 LOAD_COMMAND
| LOAD_PROGRAM
|
113 NEED_DEBUGGER_STOPPED
| NEED_DEBUGGER_STARTED
,
115 ATTACH_COMMAND
| RUN_PROGRAM
|
116 NEED_DEBUGGER_STOPPED
| NEED_DEBUGGER_STARTED
,
118 QUIT_COMMAND
| CANCEL_ALL_COMMAND
| STOP_DEBUGGER
|
119 NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
121 ABORT_COMMAND
| CANCEL_ALL_COMMAND
| STOP_DEBUGGER
|
122 ASYNCHRONOUS
| NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
125 NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
126 DMA_INSPECT_MEMORY_COMMAND
=
127 INSPECT_MEMORY_COMMAND
|
128 NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
129 DMA_DISASSEMBLE_COMMAND
=
130 DISASSEMBLE_COMMAND
|
131 NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
132 DMA_LIST_REGISTER_COMMAND
=
133 LIST_REGISTER_COMMAND
|
134 NEED_DEBUGGER_STARTED
| NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
136 UNLOAD_COMMAND
| START_DEBUGGER
|
137 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
139 START_COMMAND
| RUN_PROGRAM
|
140 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
141 DMA_BREAK_LINE_COMMAND
=
143 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
144 DMA_BREAK_FUNCTION_COMMAND
=
145 BREAK_FUNCTION_COMMAND
|
146 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
147 DMA_BREAK_ADDRESS_COMMAND
=
148 BREAK_ADDRESS_COMMAND
|
149 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
150 DMA_ENABLE_BREAK_COMMAND
=
151 ENABLE_BREAK_COMMAND
|
152 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
153 DMA_IGNORE_BREAK_COMMAND
=
154 IGNORE_BREAK_COMMAND
|
155 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
156 DMA_CONDITION_BREAK_COMMAND
=
157 CONDITION_BREAK_COMMAND
|
158 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
159 DMA_REMOVE_BREAK_COMMAND
=
160 REMOVE_BREAK_COMMAND
|
161 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
162 DMA_LIST_BREAK_COMMAND
=
164 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
165 DMA_INFO_SHAREDLIB_COMMAND
=
166 INFO_SHAREDLIB_COMMAND
|
167 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
168 DMA_INFO_TARGET_COMMAND
=
169 INFO_TARGET_COMMAND
|
170 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
171 DMA_INFO_PROGRAM_COMMAND
=
172 INFO_PROGRAM_COMMAND
|
173 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
174 DMA_INFO_UDOT_COMMAND
=
176 NEED_PROGRAM_LOADED
| NEED_PROGRAM_STOPPED
,
177 DMA_STEP_IN_COMMAND
=
178 STEP_IN_COMMAND
| RUN_PROGRAM
|
179 NEED_PROGRAM_STOPPED
,
180 DMA_STEP_OVER_COMMAND
=
181 STEP_OVER_COMMAND
| RUN_PROGRAM
|
182 NEED_PROGRAM_STOPPED
,
183 DMA_STEP_OUT_COMMAND
=
184 STEP_OUT_COMMAND
| RUN_PROGRAM
|
185 NEED_PROGRAM_STOPPED
,
187 RUN_COMMAND
| RUN_PROGRAM
|
188 NEED_PROGRAM_STOPPED
,
190 RUN_TO_COMMAND
| RUN_PROGRAM
|
191 NEED_PROGRAM_STOPPED
,
192 DMA_STEPI_IN_COMMAND
=
193 STEPI_IN_COMMAND
| RUN_PROGRAM
|
194 NEED_PROGRAM_STOPPED
,
195 DMA_STEPI_OVER_COMMAND
=
196 STEPI_OVER_COMMAND
| RUN_PROGRAM
|
197 NEED_PROGRAM_STOPPED
,
198 DMA_RUN_TO_ADDRESS_COMMAND
=
199 RUN_TO_ADDRESS_COMMAND
| RUN_PROGRAM
|
200 NEED_PROGRAM_STOPPED
,
202 EXIT_COMMAND
| LOAD_PROGRAM
|
203 NEED_PROGRAM_STOPPED
,
204 DMA_HANDLE_SIGNAL_COMMAND
=
205 HANDLE_SIGNAL_COMMAND
|
206 NEED_PROGRAM_STOPPED
,
207 DMA_LIST_LOCAL_COMMAND
=
209 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
210 DMA_LIST_ARG_COMMAND
=
212 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
213 DMA_LIST_THREAD_COMMAND
=
214 LIST_THREAD_COMMAND
|
215 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
216 DMA_SET_THREAD_COMMAND
=
218 NEED_PROGRAM_STOPPED
,
219 DMA_INFO_THREAD_COMMAND
=
220 INFO_THREAD_COMMAND
|
221 NEED_PROGRAM_STOPPED
,
222 DMA_INFO_SIGNAL_COMMAND
=
223 INFO_SIGNAL_COMMAND
|
224 NEED_PROGRAM_STOPPED
,
225 DMA_INFO_FRAME_COMMAND
=
227 NEED_PROGRAM_STOPPED
,
228 DMA_INFO_ARGS_COMMAND
=
230 NEED_PROGRAM_STOPPED
,
231 DMA_INFO_VARIABLES_COMMAND
=
232 INFO_VARIABLES_COMMAND
|
233 NEED_PROGRAM_STOPPED
,
234 DMA_SET_FRAME_COMMAND
=
236 NEED_PROGRAM_STOPPED
,
237 DMA_LIST_FRAME_COMMAND
=
239 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
240 DMA_UPDATE_REGISTER_COMMAND
=
241 UPDATE_REGISTER_COMMAND
|
242 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
243 DMA_WRITE_REGISTER_COMMAND
=
244 WRITE_REGISTER_COMMAND
|
245 NEED_PROGRAM_STOPPED
,
246 DMA_EVALUATE_COMMAND
=
248 NEED_PROGRAM_STOPPED
,
249 DMA_INSPECT_COMMAND
=
251 NEED_PROGRAM_STOPPED
,
254 NEED_PROGRAM_STOPPED
,
255 DMA_CREATE_VARIABLE_COMMAND
=
257 NEED_PROGRAM_STOPPED
,
258 DMA_EVALUATE_VARIABLE_COMMAND
=
259 EVALUATE_VARIABLE
| CANCEL_IF_PROGRAM_RUNNING
|
260 NEED_PROGRAM_STOPPED
,
261 DMA_LIST_VARIABLE_CHILDREN_COMMAND
=
262 LIST_VARIABLE_CHILDREN
|
263 NEED_PROGRAM_STOPPED
,
264 DMA_DELETE_VARIABLE_COMMAND
=
266 NEED_PROGRAM_STOPPED
,
267 DMA_ASSIGN_VARIABLE_COMMAND
=
269 NEED_PROGRAM_STOPPED
,
270 DMA_UPDATE_VARIABLE_COMMAND
=
271 UPDATE_VARIABLE
| CANCEL_IF_PROGRAM_RUNNING
|
272 NEED_PROGRAM_STOPPED
| NEED_PROGRAM_RUNNING
,
273 DMA_INTERRUPT_COMMAND
=
274 INTERRUPT_COMMAND
| STOP_PROGRAM
|
275 ASYNCHRONOUS
| NEED_PROGRAM_RUNNING
,
276 } DmaDebuggerCommand
;
278 struct _DmaQueueCommand
280 DmaDebuggerCommandType type
;
281 IAnjutaDebuggerCallback callback
;
342 struct _DmaQueueCommand
*next
;
346 *---------------------------------------------------------------------------*/
348 static DmaQueueCommand
*
349 dma_command_new (DmaDebuggerCommand cmd_type
,...)
351 DmaQueueCommand
* cmd
;
352 DmaDebuggerCommandType type
= cmd_type
& COMMAND_MASK
;
353 IAnjutaDebuggerRegister
* reg
;
357 cmd
= g_new0 (DmaQueueCommand
, 1);
358 cmd
->type
= cmd_type
;
360 va_start (args
, cmd_type
);
365 case CALLBACK_COMMAND
:
366 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
367 cmd
->user_data
= va_arg (args
, gpointer
);
370 cmd
->data
.load
.file
= g_strdup (va_arg (args
, gchar
*));
371 cmd
->data
.load
.type
= g_strdup (va_arg (args
, gchar
*));
372 cmd
->data
.load
.dirs
= NULL
;
373 for (list
= va_arg (args
, GList
*); list
!= NULL
; list
= g_list_next (list
))
375 cmd
->data
.load
.dirs
= g_list_prepend (cmd
->data
.load
.dirs
, g_strdup (list
->data
));
377 cmd
->data
.load
.dirs
= g_list_reverse (cmd
->data
.load
.dirs
);
380 cmd
->data
.attach
.pid
= va_arg (args
,pid_t
);
381 cmd
->data
.load
.dirs
= NULL
;
382 for (list
= va_arg (args
, GList
*); list
!= NULL
; list
= g_list_next (list
))
384 cmd
->data
.load
.dirs
= g_list_prepend (cmd
->data
.load
.dirs
, g_strdup (list
->data
));
386 cmd
->data
.load
.dirs
= g_list_reverse (cmd
->data
.load
.dirs
);
395 cmd
->data
.start
.args
= g_strdup (va_arg (args
, gchar
*));
396 cmd
->data
.start
.terminal
= va_arg (args
, gboolean
);
397 cmd
->data
.start
.stop
= va_arg (args
, gboolean
);
402 cmd
->data
.pos
.file
= g_strdup (va_arg (args
, gchar
*));
403 cmd
->data
.pos
.line
= va_arg (args
, guint
);
405 case STEP_IN_COMMAND
:
407 case STEP_OVER_COMMAND
:
409 case STEP_OUT_COMMAND
:
411 case RUN_TO_ADDRESS_COMMAND
:
412 cmd
->data
.pos
.address
= va_arg (args
, guint
);
414 case STEPI_IN_COMMAND
:
416 case STEPI_OVER_COMMAND
:
420 case INTERRUPT_COMMAND
:
422 case ENABLE_BREAK_COMMAND
:
423 cmd
->data
.brk
.id
= va_arg (args
, gint
);
424 cmd
->data
.brk
.enable
= va_arg (args
, gboolean
);
425 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
426 cmd
->user_data
= va_arg (args
, gpointer
);
428 case IGNORE_BREAK_COMMAND
:
429 cmd
->data
.brk
.id
= va_arg (args
, gint
);
430 cmd
->data
.brk
.ignore
= va_arg (args
, guint
);
431 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
432 cmd
->user_data
= va_arg (args
, gpointer
);
434 case REMOVE_BREAK_COMMAND
:
435 cmd
->data
.brk
.id
= va_arg (args
, gint
);
436 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
437 cmd
->user_data
= va_arg (args
, gpointer
);
439 case BREAK_LINE_COMMAND
:
440 cmd
->data
.pos
.file
= g_strdup (va_arg (args
, gchar
*));
441 cmd
->data
.pos
.line
= va_arg (args
, guint
);
442 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
443 cmd
->user_data
= va_arg (args
, gpointer
);
445 case BREAK_FUNCTION_COMMAND
:
446 cmd
->data
.pos
.file
= g_strdup (va_arg (args
, gchar
*));
447 cmd
->data
.pos
.function
= g_strdup (va_arg (args
, gchar
*));
448 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
449 cmd
->user_data
= va_arg (args
, gpointer
);
451 case BREAK_ADDRESS_COMMAND
:
452 cmd
->data
.pos
.address
= va_arg (args
, guint
);
453 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
454 cmd
->user_data
= va_arg (args
, gpointer
);
456 case CONDITION_BREAK_COMMAND
:
457 cmd
->data
.brk
.id
= va_arg (args
, gint
);
458 cmd
->data
.brk
.condition
= g_strdup (va_arg (args
, gchar
*));
459 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
460 cmd
->user_data
= va_arg (args
, gpointer
);
462 case LIST_BREAK_COMMAND
:
463 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
464 cmd
->user_data
= va_arg (args
, gpointer
);
466 case INSPECT_COMMAND
:
467 cmd
->data
.watch
.name
= g_strdup (va_arg (args
, gchar
*));
468 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
469 cmd
->user_data
= va_arg (args
, gpointer
);
471 case EVALUATE_COMMAND
:
472 cmd
->data
.watch
.name
= g_strdup (va_arg (args
, gchar
*));
473 cmd
->data
.watch
.value
= g_strdup (va_arg (args
, gchar
*));
474 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
475 cmd
->user_data
= va_arg (args
, gpointer
);
477 case LIST_LOCAL_COMMAND
:
478 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
479 cmd
->user_data
= va_arg (args
, gpointer
);
481 case LIST_ARG_COMMAND
:
482 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
483 cmd
->user_data
= va_arg (args
, gpointer
);
485 case LIST_THREAD_COMMAND
:
486 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
487 cmd
->user_data
= va_arg (args
, gpointer
);
489 case SET_THREAD_COMMAND
:
490 cmd
->data
.frame
.frame
= va_arg (args
, guint
);
492 case INFO_THREAD_COMMAND
:
493 cmd
->data
.info
.id
= va_arg (args
, guint
);
494 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
495 cmd
->user_data
= va_arg (args
, gpointer
);
497 case INFO_SIGNAL_COMMAND
:
498 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
499 cmd
->user_data
= va_arg (args
, gpointer
);
501 case INFO_SHAREDLIB_COMMAND
:
502 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
503 cmd
->user_data
= va_arg (args
, gpointer
);
505 case INFO_FRAME_COMMAND
:
506 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
507 cmd
->user_data
= va_arg (args
, gpointer
);
509 case INFO_ARGS_COMMAND
:
510 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
511 cmd
->user_data
= va_arg (args
, gpointer
);
513 case INFO_TARGET_COMMAND
:
514 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
515 cmd
->user_data
= va_arg (args
, gpointer
);
517 case INFO_PROGRAM_COMMAND
:
518 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
519 cmd
->user_data
= va_arg (args
, gpointer
);
521 case INFO_UDOT_COMMAND
:
522 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
523 cmd
->user_data
= va_arg (args
, gpointer
);
525 case INFO_VARIABLES_COMMAND
:
526 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
527 cmd
->user_data
= va_arg (args
, gpointer
);
529 case SET_FRAME_COMMAND
:
530 cmd
->data
.frame
.frame
= va_arg (args
, guint
);
532 case LIST_FRAME_COMMAND
:
533 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
534 cmd
->user_data
= va_arg (args
, gpointer
);
536 case LIST_REGISTER_COMMAND
:
537 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
538 cmd
->user_data
= va_arg (args
, gpointer
);
540 case UPDATE_REGISTER_COMMAND
:
541 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
542 cmd
->user_data
= va_arg (args
, gpointer
);
544 case WRITE_REGISTER_COMMAND
:
545 reg
= va_arg (args
, IAnjutaDebuggerRegister
*);
546 cmd
->data
.watch
.id
= reg
->num
;
547 cmd
->data
.watch
.name
= g_strdup (reg
->name
);
548 cmd
->data
.watch
.value
= g_strdup (reg
->value
);
550 case INSPECT_MEMORY_COMMAND
:
551 cmd
->data
.mem
.address
= va_arg (args
, guint
);
552 cmd
->data
.mem
.length
= va_arg (args
, guint
);
553 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
554 cmd
->user_data
= va_arg (args
, gpointer
);
556 case DISASSEMBLE_COMMAND
:
557 cmd
->data
.mem
.address
= va_arg (args
, guint
);
558 cmd
->data
.mem
.length
= va_arg (args
, guint
);
559 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
560 cmd
->user_data
= va_arg (args
, gpointer
);
563 cmd
->data
.user
.cmd
= g_strdup (va_arg (args
, gchar
*));
566 cmd
->data
.print
.var
= g_strdup (va_arg (args
, gchar
*));
567 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
568 cmd
->user_data
= va_arg (args
, gpointer
);
570 case HANDLE_SIGNAL_COMMAND
:
571 cmd
->data
.signal
.name
= g_strdup (va_arg (args
, gchar
*));
572 cmd
->data
.signal
.stop
= va_arg (args
, gboolean
);
573 cmd
->data
.signal
.print
= va_arg (args
, gboolean
);
574 cmd
->data
.signal
.ignore
= va_arg (args
, gboolean
);
576 case DELETE_VARIABLE
:
577 cmd
->data
.var
.name
= g_strdup (va_arg (args
, gchar
*));
579 case ASSIGN_VARIABLE
:
580 cmd
->data
.var
.name
= g_strdup (va_arg (args
, gchar
*));
581 cmd
->data
.var
.value
= g_strdup (va_arg (args
, gchar
*));
583 case EVALUATE_VARIABLE
:
584 cmd
->data
.var
.name
= g_strdup (va_arg (args
, gchar
*));
585 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
586 cmd
->user_data
= va_arg (args
, gpointer
);
588 case LIST_VARIABLE_CHILDREN
:
589 cmd
->data
.var
.name
= g_strdup (va_arg (args
, gchar
*));
590 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
591 cmd
->user_data
= va_arg (args
, gpointer
);
593 case CREATE_VARIABLE
:
594 cmd
->data
.var
.name
= g_strdup (va_arg (args
, gchar
*));
595 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
596 cmd
->user_data
= va_arg (args
, gpointer
);
598 case UPDATE_VARIABLE
:
599 cmd
->callback
= va_arg (args
, IAnjutaDebuggerCallback
);
600 cmd
->user_data
= va_arg (args
, gpointer
);
608 *---------------------------------------------------------------------------*/
611 dma_queue_load (DmaDebuggerQueue
*self
, const gchar
*file
, const gchar
* mime_type
, const GList
*search_dirs
)
613 if (!dma_debugger_queue_start (self
, mime_type
)) return FALSE
;
615 return dma_debugger_queue_append (self
, dma_command_new (DMA_LOAD_COMMAND
, file
, mime_type
, search_dirs
));
619 dma_queue_attach (DmaDebuggerQueue
*self
, pid_t pid
, const GList
*search_dirs
)
621 if (!dma_debugger_queue_start (self
, NULL
)) return FALSE
;
623 return dma_debugger_queue_append (self
, dma_command_new (DMA_ATTACH_COMMAND
, pid
, search_dirs
));
627 dma_queue_start (DmaDebuggerQueue
*self
, const gchar
*args
, gboolean terminal
, gboolean stop
)
629 return dma_debugger_queue_append (self
, dma_command_new (DMA_START_COMMAND
, args
, terminal
, stop
));
633 dma_queue_unload (DmaDebuggerQueue
*self
)
635 return dma_debugger_queue_append (self
, dma_command_new (DMA_UNLOAD_COMMAND
));
639 dma_queue_quit (DmaDebuggerQueue
*self
)
641 return dma_debugger_queue_append (self
, dma_command_new (DMA_QUIT_COMMAND
));
645 dma_queue_abort (DmaDebuggerQueue
*self
)
647 return dma_debugger_queue_append (self
, dma_command_new (DMA_ABORT_COMMAND
));
651 dma_queue_run (DmaDebuggerQueue
*self
)
653 return dma_debugger_queue_append (self
, dma_command_new (DMA_RUN_COMMAND
));
657 dma_queue_step_in (DmaDebuggerQueue
*self
)
659 return dma_debugger_queue_append (self
, dma_command_new (DMA_STEP_IN_COMMAND
));
663 dma_queue_step_over (DmaDebuggerQueue
*self
)
665 return dma_debugger_queue_append (self
, dma_command_new (DMA_STEP_OVER_COMMAND
));
669 dma_queue_run_to (DmaDebuggerQueue
*self
, const gchar
*file
, gint line
)
671 return dma_debugger_queue_append (self
, dma_command_new (DMA_RUN_TO_COMMAND
, file
, line
));
675 dma_queue_step_out (DmaDebuggerQueue
*self
)
677 return dma_debugger_queue_append (self
, dma_command_new (DMA_STEP_OUT_COMMAND
));
681 dma_queue_stepi_in (DmaDebuggerQueue
*self
)
683 return dma_debugger_queue_append (self
, dma_command_new (DMA_STEPI_IN_COMMAND
));
687 dma_queue_stepi_over (DmaDebuggerQueue
*self
)
689 return dma_debugger_queue_append (self
, dma_command_new (DMA_STEPI_OVER_COMMAND
));
693 dma_queue_run_to_address (DmaDebuggerQueue
*self
, guint address
)
695 return dma_debugger_queue_append (self
, dma_command_new (DMA_RUN_TO_ADDRESS_COMMAND
, address
));
699 dma_queue_exit (DmaDebuggerQueue
*self
)
701 return dma_debugger_queue_append (self
, dma_command_new (DMA_EXIT_COMMAND
));
705 dma_queue_interrupt (DmaDebuggerQueue
*self
)
707 return dma_debugger_queue_append (self
, dma_command_new (DMA_INTERRUPT_COMMAND
));
711 dma_queue_inspect (DmaDebuggerQueue
*self
, const gchar
*expression
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
713 return dma_debugger_queue_append (self
, dma_command_new (DMA_INSPECT_COMMAND
, expression
, callback
, user_data
));
717 dma_queue_evaluate (DmaDebuggerQueue
*self
, const gchar
*name
, const gchar
* value
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
719 return dma_debugger_queue_append (self
, dma_command_new (DMA_EVALUATE_COMMAND
, name
, value
, callback
, user_data
));
723 dma_queue_send_command (DmaDebuggerQueue
*self
, const gchar
* command
)
725 return dma_debugger_queue_append (self
, dma_command_new (DMA_USER_COMMAND
, command
));
729 dma_queue_print (DmaDebuggerQueue
*self
, const gchar
* variable
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
731 return dma_debugger_queue_append (self
, dma_command_new (DMA_PRINT_COMMAND
, variable
, callback
, user_data
));
735 dma_queue_list_local (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
737 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_LOCAL_COMMAND
, callback
, user_data
));
741 dma_queue_list_argument (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
743 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_ARG_COMMAND
, callback
, user_data
));
747 dma_queue_list_thread (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
749 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_THREAD_COMMAND
, callback
, user_data
));
753 dma_queue_set_thread (DmaDebuggerQueue
*self
, gint thread
)
755 return dma_debugger_queue_append (self
, dma_command_new (DMA_SET_THREAD_COMMAND
, thread
));
759 dma_queue_info_thread (DmaDebuggerQueue
*self
, gint thread
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
761 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_THREAD_COMMAND
, thread
, callback
, user_data
));
765 dma_queue_info_signal (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
767 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_SIGNAL_COMMAND
, callback
, user_data
));
771 dma_queue_info_sharedlib (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
773 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_SHAREDLIB_COMMAND
, callback
, user_data
));
777 dma_queue_handle_signal (DmaDebuggerQueue
*self
, const gchar
* name
, gboolean stop
, gboolean print
, gboolean ignore
)
779 return dma_debugger_queue_append (self
, dma_command_new (DMA_HANDLE_SIGNAL_COMMAND
, name
, stop
, print
, ignore
));
783 dma_queue_info_frame (DmaDebuggerQueue
*self
, guint frame
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
785 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_FRAME_COMMAND
, frame
, callback
, user_data
));
789 dma_queue_info_args (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
791 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_ARGS_COMMAND
, callback
, user_data
));
795 dma_queue_info_target (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
797 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_TARGET_COMMAND
, callback
, user_data
));
801 dma_queue_info_program (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
803 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_PROGRAM_COMMAND
, callback
, user_data
));
807 dma_queue_info_udot (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
809 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_UDOT_COMMAND
, callback
, user_data
));
813 dma_queue_info_variables (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
815 return dma_debugger_queue_append (self
, dma_command_new (DMA_INFO_VARIABLES_COMMAND
, callback
, user_data
));
819 dma_queue_set_frame (DmaDebuggerQueue
*self
, guint frame
)
821 return dma_debugger_queue_append (self
, dma_command_new (DMA_SET_FRAME_COMMAND
, frame
));
825 dma_queue_list_frame (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
827 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_FRAME_COMMAND
, callback
, user_data
));
831 dma_queue_callback (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
833 return dma_debugger_queue_append (self
, dma_command_new (DMA_CALLBACK_COMMAND
, callback
, user_data
));
837 dma_queue_add_breakpoint_at_line (DmaDebuggerQueue
*self
, const gchar
* file
, guint line
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
839 return dma_debugger_queue_append (self
, dma_command_new (DMA_BREAK_LINE_COMMAND
, file
, line
, callback
, user_data
));
843 dma_queue_add_breakpoint_at_function (DmaDebuggerQueue
*self
, const gchar
* file
, const gchar
* function
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
845 return dma_debugger_queue_append (self
, dma_command_new (DMA_BREAK_FUNCTION_COMMAND
, file
, function
, callback
, user_data
));
849 dma_queue_add_breakpoint_at_address (DmaDebuggerQueue
*self
, guint address
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
851 return dma_debugger_queue_append (self
, dma_command_new (DMA_BREAK_ADDRESS_COMMAND
, address
, callback
, user_data
));
855 dma_queue_enable_breakpoint (DmaDebuggerQueue
*self
, guint id
, gboolean enable
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
857 return dma_debugger_queue_append (self
, dma_command_new (DMA_ENABLE_BREAK_COMMAND
, id
, enable
, callback
, user_data
));
861 dma_queue_ignore_breakpoint (DmaDebuggerQueue
*self
, guint id
, guint ignore
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
863 return dma_debugger_queue_append (self
, dma_command_new (DMA_IGNORE_BREAK_COMMAND
, id
, ignore
, callback
, user_data
));
867 dma_queue_condition_breakpoint (DmaDebuggerQueue
*self
, guint id
, const gchar
*condition
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
869 return dma_debugger_queue_append (self
, dma_command_new (DMA_CONDITION_BREAK_COMMAND
, id
, condition
, callback
, user_data
));
873 dma_queue_remove_breakpoint (DmaDebuggerQueue
*self
, guint id
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
875 return dma_debugger_queue_append (self
, dma_command_new (DMA_REMOVE_BREAK_COMMAND
, id
, callback
, user_data
));
879 dma_queue_list_breakpoint (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
881 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_BREAK_COMMAND
, callback
, user_data
));
885 dma_queue_list_register (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
887 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_REGISTER_COMMAND
, callback
, user_data
));
891 dma_queue_update_register (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
893 return dma_debugger_queue_append (self
, dma_command_new (DMA_UPDATE_REGISTER_COMMAND
, callback
, user_data
));
897 dma_queue_write_register (DmaDebuggerQueue
*self
, IAnjutaDebuggerRegister
*value
)
899 return dma_debugger_queue_append (self
, dma_command_new (DMA_WRITE_REGISTER_COMMAND
, value
));
903 dma_queue_inspect_memory (DmaDebuggerQueue
*self
, guint address
, guint length
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
905 return dma_debugger_queue_append (self
, dma_command_new (DMA_INSPECT_MEMORY_COMMAND
, address
, length
, callback
, user_data
));
909 dma_queue_disassemble (DmaDebuggerQueue
*self
, guint address
, guint length
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
911 return dma_debugger_queue_append (self
, dma_command_new (DMA_DISASSEMBLE_COMMAND
, address
, length
, callback
, user_data
));
915 dma_queue_delete_variable (DmaDebuggerQueue
*self
, const gchar
*name
)
917 return dma_debugger_queue_append (self
, dma_command_new (DMA_DELETE_VARIABLE_COMMAND
, name
));
921 dma_queue_evaluate_variable (DmaDebuggerQueue
*self
, const gchar
*name
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
923 return dma_debugger_queue_append (self
, dma_command_new (DMA_EVALUATE_VARIABLE_COMMAND
, name
, callback
, user_data
));
927 dma_queue_assign_variable (DmaDebuggerQueue
*self
, const gchar
*name
, const gchar
*value
)
929 return dma_debugger_queue_append (self
, dma_command_new (DMA_ASSIGN_VARIABLE_COMMAND
, name
, value
));
933 dma_queue_list_children (DmaDebuggerQueue
*self
, const gchar
*name
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
935 return dma_debugger_queue_append (self
, dma_command_new (DMA_LIST_VARIABLE_CHILDREN_COMMAND
, name
, callback
, user_data
));
939 dma_queue_create_variable (DmaDebuggerQueue
*self
, const gchar
*name
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
941 return dma_debugger_queue_append (self
, dma_command_new (DMA_CREATE_VARIABLE_COMMAND
, name
, callback
, user_data
));
945 dma_queue_update_variable (DmaDebuggerQueue
*self
, IAnjutaDebuggerCallback callback
, gpointer user_data
)
947 return dma_debugger_queue_append (self
, dma_command_new (DMA_UPDATE_VARIABLE_COMMAND
, callback
, user_data
));
951 dma_command_free (DmaQueueCommand
*cmd
)
953 DmaDebuggerCommandType type
= cmd
->type
& COMMAND_MASK
;
958 case CALLBACK_COMMAND
:
963 case STEP_IN_COMMAND
:
964 case STEP_OVER_COMMAND
:
965 case STEP_OUT_COMMAND
:
966 case STEPI_IN_COMMAND
:
967 case STEPI_OVER_COMMAND
:
968 case RUN_TO_ADDRESS_COMMAND
:
970 case INTERRUPT_COMMAND
:
971 case ENABLE_BREAK_COMMAND
:
972 case IGNORE_BREAK_COMMAND
:
973 case REMOVE_BREAK_COMMAND
:
974 case LIST_BREAK_COMMAND
:
976 case LIST_LOCAL_COMMAND
:
977 case LIST_ARG_COMMAND
:
978 case INFO_THREAD_COMMAND
:
979 case LIST_THREAD_COMMAND
:
980 case SET_THREAD_COMMAND
:
981 case INFO_SIGNAL_COMMAND
:
982 case INFO_SHAREDLIB_COMMAND
:
983 case INFO_FRAME_COMMAND
:
984 case INFO_ARGS_COMMAND
:
985 case INFO_TARGET_COMMAND
:
986 case INFO_PROGRAM_COMMAND
:
987 case INFO_UDOT_COMMAND
:
988 case INFO_VARIABLES_COMMAND
:
989 case LIST_REGISTER_COMMAND
:
990 case UPDATE_REGISTER_COMMAND
:
992 case SET_FRAME_COMMAND
:
993 case LIST_FRAME_COMMAND
:
994 case INSPECT_MEMORY_COMMAND
:
995 case DISASSEMBLE_COMMAND
:
997 case INSPECT_COMMAND
:
998 case EVALUATE_COMMAND
:
999 case WRITE_REGISTER_COMMAND
:
1000 if (cmd
->data
.watch
.name
!= NULL
) g_free (cmd
->data
.watch
.name
);
1001 if (cmd
->data
.watch
.value
!= NULL
) g_free (cmd
->data
.watch
.value
);
1004 if (cmd
->data
.start
.args
) g_free (cmd
->data
.start
.args
);
1007 if (cmd
->data
.load
.file
) g_free (cmd
->data
.load
.file
);
1008 if (cmd
->data
.load
.type
) g_free (cmd
->data
.load
.type
);
1009 g_list_foreach (cmd
->data
.load
.dirs
, (GFunc
)g_free
, NULL
);
1010 g_list_free (cmd
->data
.load
.dirs
);
1012 case ATTACH_COMMAND
:
1013 g_list_foreach (cmd
->data
.attach
.dirs
, (GFunc
)g_free
, NULL
);
1014 g_list_free (cmd
->data
.attach
.dirs
);
1016 case RUN_TO_COMMAND
:
1017 case BREAK_LINE_COMMAND
:
1018 case BREAK_FUNCTION_COMMAND
:
1019 case BREAK_ADDRESS_COMMAND
:
1020 if (cmd
->data
.pos
.file
) g_free (cmd
->data
.pos
.file
);
1021 if (cmd
->data
.pos
.function
) g_free (cmd
->data
.pos
.function
);
1023 case CONDITION_BREAK_COMMAND
:
1024 if (cmd
->data
.brk
.condition
) g_free (cmd
->data
.brk
.condition
);
1027 if (cmd
->data
.user
.cmd
) g_free (cmd
->data
.user
.cmd
);
1030 if (cmd
->data
.print
.var
) g_free (cmd
->data
.print
.var
);
1032 case HANDLE_SIGNAL_COMMAND
:
1033 if (cmd
->data
.signal
.name
) g_free (cmd
->data
.signal
.name
);
1035 case DELETE_VARIABLE
:
1036 case ASSIGN_VARIABLE
:
1037 case CREATE_VARIABLE
:
1038 case EVALUATE_VARIABLE
:
1039 case LIST_VARIABLE_CHILDREN
:
1040 case UPDATE_VARIABLE
:
1041 if (cmd
->data
.var
.name
) g_free (cmd
->data
.var
.name
);
1050 dma_command_cancel (DmaQueueCommand
*cmd
)
1052 GError
*err
= g_error_new_literal (IANJUTA_DEBUGGER_ERROR
, IANJUTA_DEBUGGER_CANCEL
, "Command cancel");
1054 if (cmd
->callback
!= NULL
)
1056 cmd
->callback (NULL
, cmd
->user_data
, err
);
1061 g_warning ("Cancel command %x\n", cmd
->type
);
1063 dma_command_free (cmd
);
1067 dma_command_run (DmaQueueCommand
*cmd
, IAnjutaDebugger
*debugger
,
1068 DmaDebuggerQueue
*queue
, GError
**err
)
1070 IAnjutaDebuggerRegister reg
;
1071 gboolean ret
= FALSE
;
1072 DmaDebuggerCommandType type
= cmd
->type
& COMMAND_MASK
;
1073 IAnjutaDebuggerCallback callback
= cmd
->callback
== NULL
? NULL
: dma_debugger_queue_command_callback
;
1079 case CALLBACK_COMMAND
:
1080 ret
= ianjuta_debugger_callback (debugger
, callback
, queue
, err
);
1083 ret
= ianjuta_debugger_load (debugger
, cmd
->data
.load
.file
, cmd
->data
.load
.type
, cmd
->data
.load
.dirs
, err
);
1085 case ATTACH_COMMAND
:
1086 ret
= ianjuta_debugger_attach (debugger
, cmd
->data
.attach
.pid
, cmd
->data
.load
.dirs
, err
);
1088 case UNLOAD_COMMAND
:
1089 ret
= ianjuta_debugger_unload (debugger
, err
);
1092 ret
= ianjuta_debugger_quit (debugger
, err
);
1095 ret
= ianjuta_debugger_abort (debugger
, err
);
1098 ret
= ianjuta_debugger_start (debugger
, cmd
->data
.start
.args
, cmd
->data
.start
.terminal
, cmd
->data
.start
.stop
, err
);
1101 ret
= ianjuta_debugger_run (debugger
, err
);
1103 case RUN_TO_COMMAND
:
1104 ret
= ianjuta_debugger_run_to (debugger
, cmd
->data
.pos
.file
, cmd
->data
.pos
.line
, err
);
1106 case STEP_IN_COMMAND
:
1107 ret
= ianjuta_debugger_step_in (debugger
, err
);
1109 case STEP_OVER_COMMAND
:
1110 ret
= ianjuta_debugger_step_over (debugger
, err
);
1112 case STEP_OUT_COMMAND
:
1113 ret
= ianjuta_debugger_step_out (debugger
, err
);
1115 case RUN_TO_ADDRESS_COMMAND
:
1116 ret
= ianjuta_cpu_debugger_run_to_address (IANJUTA_CPU_DEBUGGER (debugger
), cmd
->data
.pos
.address
, err
);
1118 case STEPI_IN_COMMAND
:
1119 ret
= ianjuta_cpu_debugger_stepi_in (IANJUTA_CPU_DEBUGGER (debugger
), err
);
1121 case STEPI_OVER_COMMAND
:
1122 ret
= ianjuta_cpu_debugger_stepi_over (IANJUTA_CPU_DEBUGGER (debugger
), err
);
1125 ret
= ianjuta_debugger_exit (debugger
, err
);
1127 case INTERRUPT_COMMAND
:
1128 ret
= ianjuta_debugger_interrupt (debugger
, err
);
1130 case ENABLE_BREAK_COMMAND
:
1131 ret
= ianjuta_debugger_breakpoint_enable (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.brk
.id
, cmd
->data
.brk
.enable
, callback
, queue
, err
);
1133 case IGNORE_BREAK_COMMAND
:
1134 ret
= ianjuta_debugger_breakpoint_ignore (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.brk
.id
, cmd
->data
.brk
.ignore
, callback
, queue
, err
);
1136 case REMOVE_BREAK_COMMAND
:
1137 ret
= ianjuta_debugger_breakpoint_clear (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.brk
.id
, callback
, queue
, err
);
1139 case BREAK_LINE_COMMAND
:
1140 ret
= ianjuta_debugger_breakpoint_set_at_line (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.pos
.file
, cmd
->data
.pos
.line
, callback
, queue
, err
);
1142 case BREAK_FUNCTION_COMMAND
:
1143 ret
= ianjuta_debugger_breakpoint_set_at_function (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.pos
.file
, cmd
->data
.pos
.function
, callback
, queue
, err
);
1145 case BREAK_ADDRESS_COMMAND
:
1146 ret
= ianjuta_debugger_breakpoint_set_at_address (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.pos
.address
, callback
, queue
, err
);
1148 case CONDITION_BREAK_COMMAND
:
1149 ret
= ianjuta_debugger_breakpoint_condition (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), cmd
->data
.brk
.id
, cmd
->data
.brk
.condition
, callback
, queue
, err
);
1151 case LIST_BREAK_COMMAND
:
1152 ret
= ianjuta_debugger_breakpoint_list (IANJUTA_DEBUGGER_BREAKPOINT (debugger
), callback
, queue
, err
);
1154 case INSPECT_COMMAND
:
1155 ret
= ianjuta_debugger_inspect (debugger
, cmd
->data
.watch
.name
, callback
, queue
, err
);
1157 case EVALUATE_COMMAND
:
1158 ret
= ianjuta_debugger_evaluate (debugger
, cmd
->data
.watch
.name
, cmd
->data
.watch
.value
, callback
, queue
, err
);
1160 case LIST_LOCAL_COMMAND
:
1161 ret
= ianjuta_debugger_list_local (debugger
, callback
, queue
, err
);
1163 case LIST_ARG_COMMAND
:
1164 ret
= ianjuta_debugger_list_argument (debugger
, callback
, queue
, err
);
1166 case LIST_THREAD_COMMAND
:
1167 ret
= ianjuta_debugger_list_thread (debugger
, callback
, queue
, err
);
1169 case SET_THREAD_COMMAND
:
1170 ret
= ianjuta_debugger_set_thread (debugger
, cmd
->data
.frame
.frame
, err
);
1172 case INFO_THREAD_COMMAND
:
1173 ret
= ianjuta_debugger_info_thread (debugger
, cmd
->data
.info
.id
, callback
, queue
, err
);
1175 case INFO_SIGNAL_COMMAND
:
1176 ret
= ianjuta_debugger_info_signal (debugger
, callback
, queue
, err
);
1178 case INFO_SHAREDLIB_COMMAND
:
1179 ret
= ianjuta_debugger_info_sharedlib (debugger
, callback
, queue
, err
);
1181 case INFO_FRAME_COMMAND
:
1182 ret
= ianjuta_debugger_info_frame (debugger
, 0, callback
, queue
, err
);
1184 case INFO_ARGS_COMMAND
:
1185 ret
= ianjuta_debugger_info_args (debugger
, callback
, queue
, err
);
1187 case INFO_TARGET_COMMAND
:
1188 ret
= ianjuta_debugger_info_target (debugger
, callback
, queue
, err
);
1190 case INFO_PROGRAM_COMMAND
:
1191 ret
= ianjuta_debugger_info_program (debugger
, callback
, queue
, err
);
1193 case INFO_UDOT_COMMAND
:
1194 ret
= ianjuta_debugger_info_udot (debugger
, callback
, queue
, err
);
1196 case INFO_VARIABLES_COMMAND
:
1197 ret
= ianjuta_debugger_info_variables (debugger
, callback
, queue
, err
);
1199 case SET_FRAME_COMMAND
:
1200 ret
= ianjuta_debugger_set_frame (debugger
, cmd
->data
.frame
.frame
, err
);
1202 case LIST_FRAME_COMMAND
:
1203 ret
= ianjuta_debugger_list_frame (debugger
, callback
, queue
, err
);
1205 case LIST_REGISTER_COMMAND
:
1206 ret
= ianjuta_cpu_debugger_list_register (IANJUTA_CPU_DEBUGGER (debugger
), callback
, queue
, err
);
1208 case UPDATE_REGISTER_COMMAND
:
1209 ret
= ianjuta_cpu_debugger_update_register (IANJUTA_CPU_DEBUGGER (debugger
), callback
, queue
, err
);
1211 case WRITE_REGISTER_COMMAND
:
1212 reg
.num
= cmd
->data
.watch
.id
;
1213 reg
.name
= cmd
->data
.watch
.name
;
1214 reg
.value
= cmd
->data
.watch
.value
;
1215 ret
= ianjuta_cpu_debugger_write_register (IANJUTA_CPU_DEBUGGER (debugger
), ®
, err
);
1217 case INSPECT_MEMORY_COMMAND
:
1218 ret
= ianjuta_cpu_debugger_inspect_memory (IANJUTA_CPU_DEBUGGER (debugger
), cmd
->data
.mem
.address
, cmd
->data
.mem
.length
, callback
, queue
, err
);
1220 case DISASSEMBLE_COMMAND
:
1221 ret
= ianjuta_cpu_debugger_disassemble (IANJUTA_CPU_DEBUGGER (debugger
), cmd
->data
.mem
.address
, cmd
->data
.mem
.length
, callback
, queue
, err
);
1224 ret
= ianjuta_debugger_send_command (debugger
, cmd
->data
.user
.cmd
, err
);
1227 ret
= ianjuta_debugger_print (debugger
, cmd
->data
.print
.var
, callback
, queue
, err
);
1229 case HANDLE_SIGNAL_COMMAND
:
1230 ret
= ianjuta_debugger_handle_signal (debugger
, cmd
->data
.signal
.name
, cmd
->data
.signal
.stop
, cmd
->data
.signal
.print
, cmd
->data
.signal
.ignore
, err
);
1232 case DELETE_VARIABLE
:
1233 ret
= ianjuta_variable_debugger_delete_var (IANJUTA_VARIABLE_DEBUGGER (debugger
), cmd
->data
.var
.name
, NULL
);
1235 case ASSIGN_VARIABLE
:
1236 ret
= ianjuta_variable_debugger_assign (IANJUTA_VARIABLE_DEBUGGER (debugger
), cmd
->data
.var
.name
, cmd
->data
.var
.value
, err
);
1238 case EVALUATE_VARIABLE
:
1239 ret
= ianjuta_variable_debugger_evaluate (IANJUTA_VARIABLE_DEBUGGER (debugger
), cmd
->data
.var
.name
, callback
, queue
, err
);
1241 case LIST_VARIABLE_CHILDREN
:
1242 ret
= ianjuta_variable_debugger_list_children (IANJUTA_VARIABLE_DEBUGGER (debugger
), cmd
->data
.var
.name
, callback
, queue
, err
);
1244 case CREATE_VARIABLE
:
1245 ret
= ianjuta_variable_debugger_create (IANJUTA_VARIABLE_DEBUGGER (debugger
), cmd
->data
.var
.name
, callback
, queue
, err
);
1247 case UPDATE_VARIABLE
:
1248 ret
= ianjuta_variable_debugger_update (IANJUTA_VARIABLE_DEBUGGER (debugger
), callback
, queue
, err
);
1256 dma_command_callback (DmaQueueCommand
*cmd
, const gpointer data
, GError
*err
)
1258 DmaDebuggerCommandType type
= cmd
->type
& COMMAND_MASK
;
1264 case ATTACH_COMMAND
:
1265 case UNLOAD_COMMAND
:
1270 case RUN_TO_COMMAND
:
1271 case STEP_IN_COMMAND
:
1272 case STEP_OVER_COMMAND
:
1273 case STEP_OUT_COMMAND
:
1274 case RUN_TO_ADDRESS_COMMAND
:
1275 case STEPI_IN_COMMAND
:
1276 case STEPI_OVER_COMMAND
:
1278 case INTERRUPT_COMMAND
:
1279 case SET_THREAD_COMMAND
:
1280 case SET_FRAME_COMMAND
:
1281 case WRITE_REGISTER_COMMAND
:
1283 case HANDLE_SIGNAL_COMMAND
:
1284 case DELETE_VARIABLE
:
1285 case ASSIGN_VARIABLE
:
1286 g_return_if_reached ();
1288 case CALLBACK_COMMAND
:
1289 case ENABLE_BREAK_COMMAND
:
1290 case IGNORE_BREAK_COMMAND
:
1291 case REMOVE_BREAK_COMMAND
:
1292 case BREAK_LINE_COMMAND
:
1293 case BREAK_FUNCTION_COMMAND
:
1294 case BREAK_ADDRESS_COMMAND
:
1295 case CONDITION_BREAK_COMMAND
:
1296 case LIST_BREAK_COMMAND
:
1297 case INSPECT_COMMAND
:
1298 case EVALUATE_COMMAND
:
1299 case LIST_LOCAL_COMMAND
:
1300 case LIST_ARG_COMMAND
:
1301 case LIST_THREAD_COMMAND
:
1302 case INFO_THREAD_COMMAND
:
1303 case INFO_SIGNAL_COMMAND
:
1304 case INFO_SHAREDLIB_COMMAND
:
1305 case INFO_FRAME_COMMAND
:
1306 case INFO_ARGS_COMMAND
:
1307 case INFO_TARGET_COMMAND
:
1308 case INFO_PROGRAM_COMMAND
:
1309 case INFO_UDOT_COMMAND
:
1310 case INFO_VARIABLES_COMMAND
:
1311 case LIST_FRAME_COMMAND
:
1312 case LIST_REGISTER_COMMAND
:
1313 case UPDATE_REGISTER_COMMAND
:
1314 case INSPECT_MEMORY_COMMAND
:
1315 case DISASSEMBLE_COMMAND
:
1317 case EVALUATE_VARIABLE
:
1318 case LIST_VARIABLE_CHILDREN
:
1319 case CREATE_VARIABLE
:
1320 case UPDATE_VARIABLE
:
1321 if (cmd
->callback
!= NULL
)
1323 cmd
->callback (data
, cmd
->user_data
, err
);
1330 dma_command_is_valid_in_state (DmaQueueCommand
*cmd
, IAnjutaDebuggerState state
)
1332 return cmd
->type
& 1 << (state
+ STATE_TO_NEED
- 1);
1335 IAnjutaDebuggerState
1336 dma_command_is_going_to_state (DmaQueueCommand
*cmd
)
1338 IAnjutaDebuggerState state
;
1340 switch (cmd
->type
& CHANGE_MASK
)
1343 state
= IANJUTA_DEBUGGER_STOPPED
;
1345 case START_DEBUGGER
:
1346 state
= IANJUTA_DEBUGGER_STARTED
;
1349 state
= IANJUTA_DEBUGGER_PROGRAM_LOADED
;
1352 state
= IANJUTA_DEBUGGER_PROGRAM_STOPPED
;
1355 state
= IANJUTA_DEBUGGER_PROGRAM_RUNNING
;
1358 state
= IANJUTA_DEBUGGER_BUSY
;
1365 dma_command_has_flag (DmaQueueCommand
*cmd
, DmaCommandFlag flag
)
1367 return cmd
->type
& flag
;
1371 dma_command_get_type (DmaQueueCommand
*cmd
)
1373 return (int)cmd
->type
;