可能重复:
你如何在JavaScript中找到调用者函数?
如何在javascript函数中找到调用(调用堆栈中的前者)函数?
我想确定在onbeforeunload事件中前者被调用的函数是否是__doPostback.
下面的图片来自维基百科条目调用堆栈,有些东西我完全不理解:

我认为存储在ebp寄存器中的帧指针在序言*中初始化为:
push ebp ; Preserve current frame pointer
mov ebp, esp ; Create new frame pointer pointing to current stack top
sub esp, 20 ; allocate 20 bytes worth of locals on stack.
Run Code Online (Sandbox Code Playgroud)
如果是这样,那么图像中的帧指针是否应该指向返回地址之后和它应该是前一帧指针地址之前和之前的返回地址?我错过了什么?
谢谢!
当调试器在d中触发时,下面的代码有一个新的callstack(这里是 jsfiddle )
function c() {
setTimeout( d, 1000 );
}
function d() {
debugger;
}
c();
Run Code Online (Sandbox Code Playgroud)
如果我们修改使用setTimeout( d(), 1000 );哪个代码括号(括号:)
function c() {
setTimeout( d(), 1000 );
}
function d() {
debugger;
}
c();
Run Code Online (Sandbox Code Playgroud)
那么callstack有c()和d()(这里是 jsfiddle ).为什么?
可能吗?
我找到了Visual Studio 打印n级callstack的解决方案?
假设我有一个C++程序具有过深的继承,如下所示:
using namespace std;
class AbstractParentGeneration0 {
private:
...
protected:
...
public:
virtual returnVal funcName(void) = 0;
};
class AbstractParentGeneration1: virtual public AbstractParentGeneration0 {
private:
...
protected:
...
public:
virtual returnVal funcName(void) = 0;
};
.
.
.
class AbstractParentGeneration999999999: virtual public AbstractParentGeneration999999998 {
private:
...
protected:
...
public:
virtual returnVal funcName(void) = 0;
};
class ChildGeneration: public AbstractParentGeneration999999999 {
private:
...
protected:
...
public:
returnVal funcName(void) { ... };
};
Run Code Online (Sandbox Code Playgroud)
假设程序的性质使得深度继承不能被压缩(假设它代表进化物种谱系或深度分类层次)
调用顶级抽象类时是不是存在堆栈溢出危险?
C++程序员使用哪些策略(除了"ulimit -s bytes"或折叠抽象层次结构)在系统边界内工作?
有没有办法通过RPC在多个主机系统中展平深层垂直继承层次结构?
有人设计自己的调用堆栈机制吗?
是否存在分布式网络/集群调用堆栈这样的问题?
我有一个在Linux平台上用C++开发的系统.我正在对这个系统进行一些调试.我想查找函数的完整函数调用序列.让我们假设函数按以下顺序调用
function_1 -> function_2 -> function_3 -> function_4
Run Code Online (Sandbox Code Playgroud)
如果我在function_4上设置了一个断点,那么执行将在那时保持.我想看看在function_4之前调用functions_1,function_2和function_3.如果有任何gdb命令来跟踪这些函数调用?
谢谢,Ankur
我的最终目标是转储用户空间堆栈。
我尝试将以下cpp文件构建为android平台上的可执行文件。因此,通过调用tryToGetStack(),可以在运行时获取可执行文件的调用堆栈。
#include <utils/CallStack.h>
namespace android
{
extern "C" void tryToGetStack()
{
CallStack stack;
stack.update();
stack.dump("");
}
}
Run Code Online (Sandbox Code Playgroud)
并将lib设置添加到Android.mak,因为CallStack.tpp在libutils中
LOCAL_SHARED_LIBRARIES + = libutils
但是我总是收到错误消息:
错误:未定义对“ android :: CallStack :: CallStack()”的引用
错误:未定义对“ android :: CallStack :: update(int,int)”的引用
...
似乎可执行文件在链接时解析符号,而不是在运行时加载.so文件?我会丢失某些东西还是Android构建系统存在某些限制吗?
我知道这是一个简单的问题,但我确实需要帮助...
更新1
我尝试将代码添加到另一个可执行文件中。结果是一样的...有人知道android构建系统的规则吗?
更新2
我的控制台中有一些关键字“ target StaticExecutable:...”,我认为这就是答案。
我有一个64位应用程序,在Server 2003下作为服务运行.
当我连接VS Profiler或windbg时,我看到很多像下面那样的callstack.我知道在调试器(或分析器)中产生的进程使用调试堆等...但事实并非如此,因为该服务是由OS启动的,我只附加到它.
我不明白它为什么要展开堆栈.分析器显示花费了大量时间.更多信息:
•这些是使用vc9构建的发行版,在Server 2003上运行.
•系统环境变量_NO_DEBUG_HEAP设置为1.
•我正在使用Microsoft符号服务器.
为什么要捕获堆栈跟踪?它似乎正在记录它...但我无法找到它.
我的目标是验证应用程序是否真正展开堆栈,如果确实如此,请尽量避免使用它.
有任何想法吗?
ntdll!RtlVirtualUnwind
ntdll!RtlpWalkFrameChain
ntdll!RtlCaptureStackBackTrace
ntdll!RtlpCaptureStackTraceForLogging
ntdll!RtlLogStackBackTrace
ntdll!RtlDebugAllocateHeap
ntdll!RtlAllocateHeapSlowly
ntdll!RtlAllocateHeap
MSVCR90!malloc
MSVCR90!operator new
Run Code Online (Sandbox Code Playgroud) 这应该很容易,但是在google或SO上找不到任何直接的答案。
想象一下,在RI中运行一个函数FOuter(),并在其体内执行一些循环并调用另一个函数FInner()。是否有一种简单的方法来计数/记录FInner被调用的次数?我正在尝试估计如果进行优化可以节省多少时间FInner。
try {
requestAnimationFrame(function re(){
re();
})}
catch (e){
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
我在控制台上尝试了上面的代码,它没有按预期工作.在我看来,虽然
requestAnimationFrame(function re(){
re();
})}
Run Code Online (Sandbox Code Playgroud)
最终将触发一个错误,抛出的try是动画的id.如何捕获"超出最大调用堆栈大小"错误?