2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-19 14:37:21 +00:00
Files
openvswitch/lib/backtrace.h
Andy Zhou d0b99d38ed backtrace: Add log_backtrace()
log_backtrace() and log_backtrace_msg() logs the back trace into
the log file. It may be most useful when debugging unit tests.
"backtrace.h" documents the usage. It is not being called directly
in the code, but rather as a handy tool available when needed.

Signed-off-by: Andy Zhou <azhou@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 22:51:17 -07:00

75 lines
2.5 KiB
C

/*
* 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 */