gpt4 book ai didi

c++ - 堆栈/帧指针作为外部变量

转载 作者:行者123 更新时间:2023-11-30 18:34:23 30 4
gpt4 key购买 nike

我正在编写一些日志逻辑并想要进行一些缩进。了解是否存在任何函数调用或某个函数是否已完成的最简单方法是查看堆栈/帧的当前地址。让我们假设堆栈颠倒增长。然后,如果 log() 调用中的堆栈地址小于前一次调用期间的堆栈地址,我们可以增加缩进,因为存在某些函数调用。我知道有像 backtrace() 这样的函数知道如何转储它,或者您可以使用一些程序集。但是,我记得读过有关可用于检索此信息的外部变量的信息。有人可以命名这些变量或提供我可以找到它们的引用(据我记得,它在一些计算机系统书籍中,例如“计算机系统:程序员的视角”)。否则,获取此信息最方便/快捷的方式是什么?

更新:我意外地找到了我所指的链接 - Print out value of stack pointer
TLDR:没有可移植的方法来执行我所描述的操作...

最佳答案

此方法非常不可移植,并且会在各种转换下崩溃,但如果您只是将其用于调试日志记录,那么它可能是合适的。

获取类似于当前堆栈帧地址的最简单方法就是获取任何自动存储(本地、非静态)变量的地址。如果您希望与基线进行比较,请将某些本地地址保存在 main 中或类似于全局变量。如果您的程序是或可能是多线程的,请根据需要使用线程局部变量。

关于c++ - 堆栈/帧指针作为外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52347627/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com