首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【粉丝问答18】linux下查看函数被那些函数调用过?

int backtrace(void** buffer, int size); 函数功能:用于获取当前线程的调用堆栈。...char** backtrace_symbols (void *const *buffer, int size); 函数功能:将从backtrace函数获取的信息转化为一个字符串数组。...参数:buffer:从backtrace函数获取的数组指针。size:是该数组中的元素个数(backtrace函数的返回值)。返回值:是一个指向字符串数组的指针,它的大小同buffer相同。...注: 1、只有使用ELF二进制格式的程序才能获取函数名称和偏移地址。在其他系统,只有16进制的返回地址能被获取。另外,需要传递相应的标志给链接器,以能支持函数名功能即编译选项-rdynamic。...(array, size); char ** stacktrace = backtrace_symbols(array, stack_num); backtrace_symbols_fd(array

1.5K20

dotnet 警惕使用 StackTrace获取方法标记 Attribute 特性在 Release 下被内联

内联是一个非常常用的优化手段,内联将会让 StackTrace 获取的调用堆栈存在 Debug 下和 Release 下的差异,从而导致获取方法标记的 Attribute 特性不能符合预期工作 这一个坑是来源于我所在团队开源的...CUnit (中文单元测试框架) 仓库的一次单元测试过程,我发现了在 Debug 下能通过测试,但是在 Release 下失败。...StackTrace 的方式获取调用堆栈,通过调用堆栈获取各个方法,找到标记了 TestMethodAttribute 的方法,定位到标记是单元测试的方法 在 Release 下,发现找不到任何一个标记了...换句话说,即使不是在 Release 下,只要开启了代码优化,那么都可能因为代码优化让某些函数被内联,从而让调用堆栈看起来不符合预期 因此,使用 StackTrace 获取调用堆栈,将在不同的环境下可能存在一些差异...如果再需要从方法上,获取方法标记的特性,那这个逻辑自然是不靠谱的 规避方法有两个: 第一个,那就是不要这么使用,找找其他的方法 第二个是,如果没有其他的方法,那可以考虑在明确需要获取某个特性的函数上,标记

40950

java中的最顶级的异常类Throwable

在Throwable类中使用输出流来进行输出,并把其对象作为输出流对象,这就需要必须实现序列化接口,使得其可以进行序列化,才能作为输出流中的对象进行输出。 ...子类Error和Exception  Error主要是用于表示Java和虚拟机内部的异常信息,而Exception异常则是由于程序中可能存在各种的问题,是需要使用者去注意和捕获的异常。 ...源码解读  默认是空的StackTrace的节点数组初始化为空的stack,getOurStackTrace()方法实现的主要是获取当前节点异常的信息,获取栈上面的异常信息,遍历每一个异常信息,赋值给stackTrace...(stackTrace == null && backtrace !...;           }           return stackTrace;       }   获取到栈异常信息以后,输出异常信息,对该数组进行遍历,输出异常的位置。

87530

.NET 的依赖库libunwind

目前有三种靠谱且普遍的编程的方法来获取调用堆栈: gcc编译器自带的宏:__builtin_return_address:这是一种非常粗糙,底层的方式。这个宏将获得堆栈上每个帧上函数的返回地址。...glibc的backtracebacktrace_symbols:可以获取调用堆栈上函数的实际符号名称。 使用libunwind。...在三者之间,.NET 使用 libunwind库,因为它是最时髦,最广泛和最方便的解决方案。 它也比第二种方法的backtrace更灵活,可以够提供额外的信息,例如每个堆栈帧的CPU的寄存器值。...例如,gcc可以使用libunwind实现零成本的C++异常捕捉(当实际抛出异常时需要堆栈展开)[^1]。...http://nongnu.org),The libunwind project - News 1.1版本从2012年后有几年不更新,2017年恢复更新发布了1.2版本支持aarch64并且支持了快速stacktrace

1.6K50

muduo网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())

*buffer, int size); // backtrace 栈回溯,保存各个栈帧的地址  char **backtrace_symbols(void *const *buffer, int size...); // backtrace_symbols 根据地址,转成相应的函数符号 // buffer 是指向一个数组的指针,数组存放的每一项是指向字符串的指针 // backtrace_symbols 内部调用...二、Thread类封装 class Thread : boost::noncopyable typedef boost::function ThreadFunc; 具体实现分析见这里。...比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。...(3)、有一个函数gettid()可以得到tid,但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取

1.2K00

muduo 4 网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())

#include  int backtrace(void **buffer, int size); // backtrace 栈回溯,保存各个栈帧的地址  char **backtrace_symbols...二、Thread类封装 class Thread : boost::noncopyable typedef boost::function ThreadFunc; 具体实现分析见这里...比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。...(3)、有一个函数gettid()可以得到tid,但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取。...::is_same::value;     //判断类型是否相同   BOOST_STATIC_ASSERT(sameType); } 3、boost::is_same const

1.4K10

回溯算法解数独问题(java版)

方法里有两个属性——行号和列号。     我们的原理就是从第0行0列开始,依次往里面填入1-9之间的数字,然后判断填入的这个数字是否能放进去(该行该列和它所在的小九宫格是否有重复数字)。...一直到该行的最后一列,然后换行继续重复上面的步骤(也就是执行backTrace方法)。...还缺少的是边界值的判断,就是当已经到最后一列了,还没到最后一行时,需要对行号加1,然后恢复列号为0。 修改一下backTrace方法,增加边界值判断。...("获取正确解"); printArray(); return; } //已经到了列末尾了,还没到行尾,就换行...("获取正确解"); printArray(); return; } //已经到了列末尾了,还没到行尾,就换行

1.6K30

浅谈StackTrace

在.Net Framework中,定义了StackTrace类,它可以获取当前堆栈的每一帧的信息。...它的构造函数: //默认不获取文件信息 StackTrace(); //是否获取文件信息,包括文件名,行号StackTrace(bool fNeedFileInfo); //可以指定跳过帧的数量 StackTrace...(int skipFrames); StackTrace(int skipFrames, bool fNeedFileInfo); //根据提供的Exception对象,生成堆栈信息 StackTrace...(Exception e); StackTrace(Exception e, bool fNeedFileInfo); StackTrace(Exception e, int skipFrames);...我们这里的堆栈信息并不能获取每一个函数在调用的时候,传递的参数值,对于有这种需求的程序员,可以考虑使用AOP编程的方式编写一个MethodContextLogger组件,这个组件可以获取方法的出入的参数值

1.4K40

conan入门(十):Windows下Android NDK交叉编译Boost

本文在此基础上说明Windows下如何使用conan实现Android NDK交叉编译经常用到的的Boost库。...》中下面的说明: 注意:对于 32 位 ARM,编译器会使用前缀 armv7a-linux-androideabi,但 binutils 工具会使用前缀 arm-linux-androideabi。...$ conan install boost/1.69.0@ -pr:h android_armv7a_clang -pr:b default --build missing -o without_stacktrace...build missing 如果依赖包中没有找到预编译的二进制包则从源码编译 conan install 命令行用法详细说明参见Conan官方文档《conan install》 -o without_stacktrace...=True 指定不编译 stacktrace 库,不知道为什么conan NDK交叉编译时不会编译stacktrace,而且会导致编译结束后报错,需要分析boost的conanfile.py脚本才能找到原因

1.7K20
领券