libevfibers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
trace.c
1 /********************************************************************
2 
3  Copyright 2013 Konstantin Olkhovskiy <lupus@oxnull.net>
4 
5  Licensed under the Apache License, Version 2.0 (the "License");
6  you may not use this file except in compliance with the License.
7  You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11  Unless required by applicable law or agreed to in writing, software
12  distributed under the License is distributed on an "AS IS" BASIS,
13  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  See the License for the specific language governing permissions and
15  limitations under the License.
16 
17  ********************************************************************/
18 
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <execinfo.h>
22 #include <evfibers_private/trace.h>
23 #include <evfibers_private/fiber.h>
24 
25 void fill_trace_info(FBR_P_ struct trace_info *info)
26 {
27  if (0 == fctx->__p->backtraces_enabled)
28  return;
29  info->size = backtrace(info->array, TRACE_SIZE);
30 }
31 
32 void print_trace_info(FBR_P_ struct trace_info *info, fbr_logutil_func_t log)
33 {
34  size_t i;
35  char **strings;
36  if (0 == fctx->__p->backtraces_enabled) {
37  (*log)(FBR_A_ "(No backtrace since they are disabled)");
38  return;
39  }
40  strings = backtrace_symbols(info->array, info->size);
41  for (i = 0; i < info->size; i++)
42  (*log)(FBR_A_ "%s", strings[i]);
43  free(strings);
44 }