首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算调用栈帧的数量?

如何计算调用栈帧的数量?
EN

Stack Overflow用户
提问于 2009-03-26 16:06:38
回答 2查看 884关注 0票数 1

对于C++调试应用程序,我希望能够轻松地计算调用栈帧的数量。有没有操作系统功能可以做到这一点?

我需要这为Windows和Posix,即跨平台。任何一个或两个平台的解决方案都是很好的。

我可以遍历堆栈来找到所有的帧,但我想知道是否有一个简单的调用来做到这一点。

EN

回答 2

Stack Overflow用户

发布于 2009-03-26 17:26:16

不,因为这是一个编译器的事情。

编译器可以自由地定义自己的ABI。这定义了如何定义callstack (如果有的话)。除非您使用的是纯"C“,否则这不是微不足道的,并且对于每个编译器都是不同的。

我还听说(但没有证实) MS正在使用一种新的方案,其中堆栈帧被随机放置在内存周围,以防止(使之更难)影响返回跳转的缓冲区溢出攻击。这并不完全相关,但却是一个有趣的事实。

票数 2
EN

Stack Overflow用户

发布于 2009-04-06 21:58:04

如果您使用glibc (Linux),您可以使用以下函数来获取堆栈跟踪:

代码语言:javascript
复制
#include <execinfo.h> 
int backtrace(void **buffer, int size); 
char **backtrace_symbols(void *const *buffer, int size); 
void backtrace_symbols_fd(void *const *buffer, int size, int fd);

有关更多信息,请参阅backtrace的手册页。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/686419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档