Linux下获取调用堆栈地址
2016-06-14 10:19
561 查看
#include <stdio.h> #include <stdlib.h> #include <execinfo.h> void get_stack_info(char *buf, int len) { #define MAX_BACK_TRACE_DEPTH 100 #define MAX_STACK_SIZE 64 if (buf == NULL || len <= 0) { return; } void *array[MAX_BACK_TRACE_DEPTH]; size_t size; char **strings; char *p = buf; size_t i; int n; size = backtrace(array, MAX_BACK_TRACE_DEPTH); strings = backtrace_symbols(array, size); n = snprintf(p, len, "********************************************\r\n"); p += n; len -= n; n = snprintf(p, len, "Call stack:\r\n"); p += n; len = len - n; for (i = 0; i < size; ++i) { if (len < 0) { break; } char *pl = strstr(strings[i], "["); char *pr = strstr(strings[i], "]"); char addr[MAX_STACK_SIZE]; memset(addr, '\0', sizeof(addr)); strncpy(addr, pl + 1, pr - pl - 1); n = snprintf(p , len , " ip[%02d] : %s\r\n", (int)i, addr); p += n; len -= n; } n = snprintf(p, len, "*******************************************\r\n"); p += n; len -= n; free(strings); } int demo() { char buf[2048]; memset(buf, 0, sizeof(buf)); get_stack_info(buf, sizeof(buf) - 1); printf("%s\r\n", buf); } int main(int argc, char **argv) { demo(); return 0; }
相关文章推荐
- python (16) 如何在linux下安装lxml(pip安装,ubuntu下,centos下)
- centos7 安装nfs和设置权限问题
- linux命令--wget
- centos6.5 mysql5.6 不编译安装
- epoll机制读取linux串口数据
- linux系统jetty服务器部署项目用到的相关命令
- Linux中的DRM
- Linux中的DRM
- Linux中的DRM
- Linux中的DRM
- linux文件系统的目录结构
- Cobbler部署文档V1.0
- ubuntu上ssh环境的搭建与测试
- Linux系统上用源码安装OpenSSL的方法
- linux所有服务列表
- 【linux】Cache和Buffer的区别
- linux挂载新磁盘、分区和开机自动挂载
- Debian 8.0桌面系统root用户登录和root用户自动登录
- web项目部署到linux服务器下常用命令
- 【linux】/etc/fstab修复