В стеках балерины следы связаны только с ошибками, которые выдают.Обычно вы будете возвращать ошибки, а не выбрасывать, в этом случае у вас не будет способа получить трассировку стека.Если вы действительно хотите получить трассировку стека из возвращенных ошибок, вы можете установить ошибку, возвращаемую из вызова функции, как причину ошибки, которую вы возвращаете из текущей функции.Затем вы можете использовать эту цепочку причин, чтобы создать собственную трассировку стека.В приведенном ниже примере есть оба случая: выданная ошибка и возвращенная ошибка (с указанием причин).
import ballerina/io;
public function main() {
error e = returnedError();
io:println(e);
io:println();
thrownError();
}
function thrownError() {
test1();
}
function test1() {
error e = {message: "ERROR from test 2"};
throw e;
}
function returnedError() returns error {
error e = test2();
return {message: "ERROR from test 3", cause: e};
}
function test2() returns error {
return {message: "ERROR from test 4"};
}
Приведенная выше программа приведет к следующему выводу.
{message:"ERROR from test 3", cause:{message:"ERROR from test 4", cause:null}}
error: ballerina/runtime:CallFailedException, message: call failed
at main(test.bal:7)
caused by ballerina/runtime:CallFailedException, message: call failed
at thrownError(test.bal:11)
caused by error, message: eRROR from test 2
at test1(test.bal:16)
Обратите внимание, чтоустановка ошибок как причин по-прежнему не дает вам такой информации, как исходный файл и номер строки.