草庐IT

callstack

全部标签

ruby - 有没有办法知道调用方法?

我知道类方法告诉对象类的名称是什么,我怎么知道调用方法的名称?有办法知道吗? 最佳答案 ExaminingtheRubyCallStack共享此信息:您有没有想过在不引发异常的情况下查看调用堆栈?caller.each{|c|putsc} 关于ruby-有没有办法知道调用方法?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1859979/

javascript - 在javascript中获取导致错误的调用堆栈

问题是一般情况下无法获取调用堆栈,这可以按照此处所述进行:http://eriwen.com/javascript/js-stack-trace/而是从事件处理程序访问触发事件的调用堆栈。特别是我对记录窗口错误事件的调用堆栈很感兴趣window.onerror=function(msg,url,line){//callstack//wouldbenicetohave.//logcallstackorwhatever.(notethiscanbedonew/ajaxandservice,andisnotthequestionathand.}但我确实知道如何记录错误。(我使用jquery的

javascript - 了解已解决 promise 的后续 then() 处理程序的执行顺序

我正在学习Promise,为了理解它,我阅读了一些有关JavaScript事件循环的内容。这article简要介绍了调用栈、事件表、消息队列等事件循环的工作原理。但我不知道调用堆栈如何处理包含“return”的行,以及此后会发生什么。下面是我写的一个例子,希望能理解Promise是如何基于事件循环工作的。另见http://jsbin.com/puqogulani/edit?js,console如果你想试一试。varp1=newPromise(function(resolve,reject){resolve(0);});p1.then(function(val){console.log(

javascript - 如何跟踪 Javascript 事件(Stack Trace)?

在任何编程语言中,我都可以跟踪任何函数并知道其他人调用了哪个函数。但是在Javascript中,我不知道怎么做,因为代码不是我写的,而且据我所知,Firebug没有提供这个功能。一个例子:我想显示点击XYZ元素时调用的每个函数的函数名,并按顺序显示。 最佳答案 找到这个:Ajavascriptstacktraceinanybrowser,James说他们有一个githubaccountnowfunctionprintStackTrace(){varcallstack=[];varisCallstackPopulated=false;

go - 如何通过运行时获取真实文件名。不同goroutine中匿名函数调用的调用者

我有这个示例代码https://play.golang.org/p/c_2GECIcrW我期望getFileName会打印出类似ma​​in.go:11的内容,但我得到的是asm_amd64p32.s:1014在这种情况下,我该怎么做才能得到预期的结果?我可以存档并继续使用匿名函数吗? 最佳答案 您的期望不正确。为了便于解释,让我在这里粘贴您的代码:packagemainimport("fmt""path/filepath""runtime""time")funcmain(){getFileName(1)time.Sleep(tim

windows - 从用户计算机上的 native C++ 应用程序恢复调用堆栈

我现在正在处理的应用程序在启动时在其中一台用户机器上崩溃。用户机器运行的是WindowsXP并且有很多访问限制,其中一个可能导致问题。如何在不安装任何开发工具的情况下从崩溃中检索调用堆栈?谢谢 最佳答案 你不能在XP中这样做,但在Vista/Win7中:等到进程卡在“你想将此提交给Microsoft”,不要点击任何东西打开任务管理器=>进程选项卡=>右键单击​​您的EXE选择“创建转储文件”压缩文件,发送到开发箱对于XP,您可以使用一个名为userdump.exe的轻量级程序,但您说“没有工具”:)

c++ - 如何使 StackWalk64() 在 x64 上成功运行?

我有一个C++工具可以一次遍历调用堆栈。在代码中,它首先获取实时CPU寄存器的拷贝(通过RtlCaptureContext()),然后使用一些“#ifdef...”block将特定于CPU的寄存器名称保存到stackframe.AddrPC.Offset,...AddrStack...,and...AddrFrame...;此外,对于上面的3个Addr...成员中的每一个,它都设置了stackframe.Addr....Mode=AddrModeFlat。(这是从我前一段时间遇到的一些示例代码中借用的。)使用x86二进制文件,效果很好。但是,对于x64二进制文件,StackWalk64

windows - 调用堆栈问题

我最近一直在研究调用堆栈。然而,我一直在阅读的所有示例和文章都是单线程的。我对调用堆栈在内存中的样子以及我们如何分析它很感兴趣。很抱歉在一个帖子中包含了这么多问题。但是,当每个问题都相关时,为每个问题创建一个帖子似乎很麻烦。我的问题是针对Windowsx86的。所以我遇到困难的问题是:进程中的每个线程是否总是有一个调用堆栈?即线程不共享调用栈?每个调用栈的大小是固定的吗?还是每个线程都可以不同?让我们假装自己做所有事情并用汇编编写我们的程序。调用栈是不是神奇的给了我们?还是必须自己实现?如果我们用汇编编写程序,我们是否会预留一些内存并将调用堆栈内存起始地址设置为ESP以进行设置?-迈克

windows - 符号如何解决在 x86 调试中使用 FPO 遍历堆栈?

在这个答案中:https://stackoverflow.com/a/8646611/192359,解释了在调试x86代码时,即使使用了FPO(帧指针省略),符号也允许调试器显示调用堆栈。给出的解释是:Onthex86PDBscontainFPOinformation,whichallowsthedebuggertoreliablyunwindacallstack.我的问题是这些信息是什么?据我了解,仅知道函数是否具有FPO并不能帮助您找到堆栈指针的原始值,因为这取决于运行时信息。我在这里错过了什么? 最佳答案 从根本上说,总是可以

windows - WinDbg 没有显示整个调用堆栈?

我正在尝试使用WinDbg调试一款名为“Ballmaster”的非常古老的游戏(我没有其源代码)。当显示对话框时,我将WinDbg附加到游戏中,这样UI线程的调用堆栈就不会改变。以下是正在运行的线程列表:当我点击Ballmasterthread,呈现如下调用栈:ntdll!NtDelayExecution+0xcKERNELBASE!SleepEx+0x99KERNELBASE!Sleep+0xfUSER31!HookedCreateWindowExA+0x41DlgBox!Ordinal49+0x35ddDlgBox!Ordinal49+0x4d58uxtheme!ThemePreD