博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd
阅读量:2029 次
发布时间:2019-04-28

本文共 2276 字,大约阅读时间需要 7 分钟。

 

#ifndef __CRTL_BITS_ASSERT_H#define __CRTL_BITS_ASSERT_H 1#include 
#include
#include "crtl/bits/crtl_assert_backtrace.h"#define CRTL_SYS_ERROR strerror(errno)/* backtrace */#define crtl_assert_backtrace(fp) __crtl_assert_backtrace(fp)/* macro */#define crtl_assert(exp) crtl_assert_fp(stderr, exp)#define crtl_assert_fp(fp, exp) __crtl_assert(fp, !!(exp), 0, __FILE__, __func__, __LINE__)/* crypto API */void __crtl_assert(FILE *fp, int exp, int switch_on_assert, const char *__file, const char *__func, const int __line);#endif /*<__CRTL_BITS_ASSERT_H>*/#include "crtl/crtl_assert.h"#include "crtl/crtl_lock.h"/* crypto API */#define __assert_prefix "assert."void __crtl_assert(FILE *fp, int exp, int switch_on_assert, const char *__file, const char *__func, const int __line){ if(!fp) { fp = stdout; } crtl_fd_lock(fileno(fp)); if(!exp) { #define __ASSERT_NOTE_FMT "Assert [File:%s %s:%d]" #define __ASSERT_NOTE_CONTEXT __file, __func, __line#define __ASSERT_NOTE_PREFIX "\033[1;31m"#define __ASSERT_NOTE_SUBFIX "\033[0m" fprintf(fp, __ASSERT_NOTE_FMT"\n", __ASSERT_NOTE_CONTEXT); fprintf(fp, "%s"__ASSERT_NOTE_FMT"%s\n",__ASSERT_NOTE_PREFIX, __ASSERT_NOTE_CONTEXT,__ASSERT_NOTE_SUBFIX); crtl_assert_backtrace(fp); fflush(fp); } crtl_fd_unlock(fileno(fp)); if(switch_on_assert) assert(exp); return ;}

backtrace

#ifndef __CRTL_BITS_ASSERT_BACKTRACE_H#define __CRTL_BITS_ASSERT_BACKTRACE_H 1#include 
#include
#include "crtl/easy/attribute.h"#include "crtl/easy/macro.h"#include "crtl/crtl_log.h"#define __CRTL_BACKTRACE_SIZE 1024/* backtrace */static inline void _unused __crtl_assert_backtrace(FILE *fp){ if(fp == NULL) { fp = stderr; } void *__buffer[__CRTL_BACKTRACE_SIZE]; unsigned long size = 0; char **__backtrace; int _unused i; size = backtrace (__buffer, __CRTL_BACKTRACE_SIZE); __backtrace = backtrace_symbols (__buffer, size); //FILE *__fp = fopen("core.121212", "w"); //backtrace_symbols_fd (__buffer, size, fileno(fp)); backtrace_symbols_fd (__buffer, size, fileno(fp)); free(__backtrace); return; }#endif /*<__CRTL_BITS_ASSERT_BACKTRACE_H>*/

转载地址:http://lbpaf.baihongyu.com/

你可能感兴趣的文章
微服务架构:Dubbo VS Spring Cloud
查看>>
Spring Boot 面试题
查看>>
ActiveMQ基本详解与总结
查看>>
工作中常用的oracle数据库sql
查看>>
Java 正确的做字符串编码转换
查看>>
万能java字符串编码转换工具类
查看>>
面试之---手写单例模式
查看>>
SpringBoot-@PathVariable
查看>>
小议“悲观锁和乐观锁”的原理、场景、示例
查看>>
面试中的这些坑,你踩过几个?
查看>>
socket,tcp,http三者之间的区别和原理
查看>>
HTTP协议详解
查看>>
Java经典基础与高级面试36题和答案
查看>>
Java解析xml文档
查看>>
面试题: 面向切面编程(AOP)的理解
查看>>
(京东面试题)java动态代理主要怎么实现的,spring aop 原理 如下类
查看>>
Spring AOP 最热门面试题及答案
查看>>
Union和Union All到底有什么区别
查看>>
java读取txt文件,使用正则表达式获取信息
查看>>
exists\not exists和in\not in效率
查看>>