gpt4 book ai didi

windows - 没有符号的 Windows 和 Mac OS X/Linux 上的调用堆栈

转载 作者:可可西里 更新时间:2023-11-01 12:09:14 26 4
gpt4 key购买 nike

在 Windows 上,如果调用堆栈中没有涉及模块的符号,比如故障转储,那么调用堆栈中该模块下面的所有调用都是错误的(不仅缺少名称,而且缺少序列) .

在 Linux 或 Mac OS X 上,如果没有符号,则不会显示函数名称,但调用顺序仍然存在。

调用堆栈展开或符号生成机制的什么差异导致了这种差异?

最佳答案

在 Windows 中,仍然可以在没有符号信息的情况下获取应用程序的完整调用堆栈,前提是将“堆栈帧指针”放在调用堆栈上。如果您使用调试进行编译,这些堆栈帧指针由 Visual Studio 编译器生成,但如果您使用优化 (/Ox) 进行编译,则不会生成这些堆栈帧指针。因此,如果您仍然希望堆栈帧指针具有优化,则必须添加/Oy- 编译器选项(Oy- 代表:不删除堆栈帧指针)。

栈帧指针只是指向下一个栈帧。因此,调试器和崩溃处理程序可以轻松获取堆栈(通过查看堆栈帧指针跟踪堆栈,并使用堆栈上的返回地址)。

如果应用程序没有堆栈帧指针,调试器或崩溃处理程序必须使用调试信息来了解函数参数的数量、局部变量的数量,...以获得每个堆栈的大小帧并跟随调用堆栈上的所有堆栈帧。

关于windows - 没有符号的 Windows 和 Mac OS X/Linux 上的调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3210597/

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