Как обрабатывать возврат TCL_ERROR из Tcl_EvalFile () в C? - PullRequest
1 голос
/ 08 апреля 2019

У меня есть программа на C, которая вызывает интерпретатор TCL через Tcl_EvalFile ().Я проверяю состояние, возвращаемое Tcl_EvalFile, и знаю, когда он выдает что-то отличное от TCL_OK.Однако я не получаю никаких отчетов о трассировке в моей программе, как если бы я использовал tclsh.

Я знаю о внедрении функций C в TCL, но в моем случае это не сработает.Я на самом деле вызываю TCL из функции C, которую вызывает программа Lua.Показанный пример кода является упрощенной версией.

Вот вызов Tcl_EvalFile ():

  if ((status = Tcl_EvalFile(interp, script)) != TCL_OK)
    {
      /* I would like to handle the error here before Tcl_Exit()*/
      Tcl_Exit(status);
      return TCL_ERROR;
    }

Есть ли функция TCL, которую я могу вызвать, которая выдаст сообщение трассировки, аналогичное тому, которое генерирует tclsh?

1 Ответ

1 голос
/ 09 апреля 2019

Самое важное, что вы можете сделать для обработки ошибки, - это распечатать сообщение об ошибке!Вторым по важности является печать трассировки стека.Tcl помещает сообщение об ошибке в результат интерпретатора, а трассировку стека в специальную глобальную переменную, errorInfo.

if ((status = Tcl_EvalFile(interp, script)) != TCL_OK) {
    // Get the error message out of the way *right now*
    fprintf(stderr, "ERROR when reading file %s: %s\n", script,
            Tcl_GetStringResult(interp));
    // Most convenient access for this is to run a tiny Tcl script.
    Tcl_Eval(interp, "puts {STACK TRACE:}; puts $errorInfo; flush stdout;");
    Tcl_Exit(status);
    return TCL_ERROR; // This should be unreachable; Tcl_Exit doesn't return...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...