]> git.sur5r.net Git - openocd/commitdiff
helper: add stacktrace command that returns error stacktrace
authorØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 12 Sep 2010 17:29:37 +0000 (19:29 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 12 Sep 2010 18:18:43 +0000 (20:18 +0200)
Ability to access the stacktrace from a script is quite
handy.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/openocd.c

index 5f890dbe0fc231019a4c925b9c0fea3d211f306c..7347cad8e5b0d5ba3cb8122d078a78d5517f6bc6 100644 (file)
@@ -185,6 +185,29 @@ COMMAND_HANDLER(handle_add_script_search_dir_command)
        return ERROR_OK;
 }
 
+
+static int jim_stacktrace_command(Jim_Interp *interp, int argc,
+               Jim_Obj * const *argv)
+{
+       if (argc != 1)
+       {
+               return JIM_ERR;
+       }
+       Jim_Obj * stacktrace = Jim_DuplicateObj(interp, interp->stackTrace);
+       
+       /* insert actual error site at beginning of list*/
+       Jim_Obj *procname = Jim_NewStringObj(interp, "", -1); /* Uhhh... don't know this one. */
+       Jim_ListInsertElements(interp, stacktrace, 0, 1, &procname);
+       Jim_Obj *filename = Jim_NewStringObj(interp, interp->errorFileName, -1);
+       Jim_ListInsertElements(interp, stacktrace, 1, 1, &filename);
+       Jim_Obj *line = Jim_NewIntObj(interp, interp->errorLine);
+       Jim_ListInsertElements(interp, stacktrace, 2, 1, &line);
+
+       Jim_SetResult(interp, stacktrace);
+
+       return JIM_OK;
+}
+
 static const struct command_registration openocd_command_handlers[] = {
        {
                .name = "version",
@@ -215,6 +238,14 @@ static const struct command_registration openocd_command_handlers[] = {
                .help = "dir to search for config files and scripts",
 
        },
+       {
+               .name = "stacktrace",
+               .jim_handler = jim_stacktrace_command,
+               .mode = COMMAND_ANY,
+               .help = "returns the stacktrace as a list of triples: proc, file, line."
+               "The stack trace is reset when a new stack trace is being built after "
+               "a new failure has occurred.",
+       },
        COMMAND_REGISTRATION_DONE
 };