1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*
* Copyright (c) 2009 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef BACKTRACE_H
#define BACKTRACE_H 1
#include <stdint.h>
#include "dynamic-string.h"
/* log_backtrace() will save the backtrace of a running program
* into the log at the DEBUG level.
*
* To use it, insert the following code to where backtrace is
* desired:
* #include "backtrace.h"
*
* log_backtrace();
* // A message can be added with log_backtrace_msg("your message")
*
*
* A typical log will look like the following. The hex numbers listed after
* "backtrace" are the addresses of the backtrace.
*
* 2014-03-13T23:18:11.979Z|00002|backtrace(revalidator_6)|ERR|lib/dpif-netdev.c:1312: (backtrace: 0x00521f57 0x00460365 0x00463ea4 0x0046470b 0x0043b32d 0x0043bac3 0x0043bae2 0x0043943b 0x004c22b3 0x2b5b3ac94e9a 0x2b5b3b4a33fd)
*
* The following bash command can be used to view backtrace in
* a more readable form.
* addr2line -p -e vswitchd/ovs-vswitchd <cut-and-paste back traces>
*
* An typical run and output will look like:
* addr2line -p -e vswitchd/ovs-vswitchd 0x00521f57 0x00460365 0x00463ea4
* 0x0046470b 0x0043b32d 0x0043bac3 0x0043bae2 0x0043943b 0x004c22b3
* 0x2b5b3ac94e9a 0x2b5b3b4a33fd
*
* openvswitch/lib/backtrace.c:33
* openvswitch/lib/dpif-netdev.c:1312
* openvswitch/lib/dpif.c:937
* openvswitch/lib/dpif.c:1258
* openvswitch/ofproto/ofproto-dpif-upcall.c:1440
* openvswitch/ofproto/ofproto-dpif-upcall.c:1595
* openvswitch/ofproto/ofproto-dpif-upcall.c:160
* openvswitch/ofproto/ofproto-dpif-upcall.c:717
* openvswitch/lib/ovs-thread.c:268
* ??:0
* ??:0
*/
#define log_backtrace() log_backtrace_at(NULL, SOURCE_LOCATOR);
#define log_backtrace_msg(msg) log_backtrace_at(msg, SOURCE_LOCATOR);
#define BACKTRACE_MAX_FRAMES 31
struct backtrace {
int n_frames;
uintptr_t frames[BACKTRACE_MAX_FRAMES];
};
void backtrace_capture(struct backtrace *);
void log_backtrace_at(const char *msg, const char *where);
#endif /* backtrace.h */
|