use xpcall to save a call stack