问题标签 [callstack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 调用堆栈中的“[轻量级函数]”
我正在调试一个程序(VS2008),并且我正在逐步执行代码行。我遇到了正在调用委托函数的一行,我试图进入它。然而,不是像我预期的那样进入该方法,而是绕过了该方法,而调试器则进入了我认为是委托调用的函数。在调用堆栈中,我期望委托方法所在的行与 text 一起显示为灰色[Lightweight Function]
。
“轻量级功能”部分是什么意思?有没有办法进入这个功能?
python - 在 Python 中确定特定函数是否在堆栈上的有效方法
对于调试,判断一个特定函数是否在调用堆栈上更高通常很有用。例如,我们经常只想在某个函数调用我们时运行调试代码。
一种解决方案是检查所有更高的堆栈条目,但这是在堆栈深处并重复调用的函数中,这会导致过多的开销。问题是找到一种方法,使我们能够以合理有效的方式确定特定函数是否在调用堆栈上更高。
相似的
- 从框架对象获取对执行堆栈上的函数对象的引用?- 这个问题的重点是获取函数对象,而不是确定我们是否在一个特定的函数中。尽管可以应用相同的技术,但它们最终可能效率极低。
.net - 调用堆栈上的异常处理堆栈帧的顺序
在 C# 中,异常处理堆栈帧被推送到调用堆栈的顺序是什么。如果我有一个方法:
是否为每个异常处理程序创建了一个单独的堆栈帧,如下所示?
或者
或者
别的东西?
gdb - 在 gdb 6.3 中的多个堆栈之间切换
程序中有两个堆栈:一个是由操作系统创建的,第二个是由程序本身创建的,用于运行一些代码。
当程序在第二个堆栈崩溃时,我想切换到 gdb 中的主堆栈并查看回溯。可能吗?
我试图将 rsp 保存到一个变量并在崩溃后对其进行更改,但结果回溯不正确。我认为 gdb 无法区分堆栈中的帧。
c - 谁负责清理?
我想知道哪个负责清理堆栈
假设你有一个 fun 函数,可以这样说:
什么时候fun
被调用,它将与参数一起进入堆栈,然后当函数返回时,负责清理堆栈的人是它自己的函数还是将保存返回值的“var”。
还有一件事,任何人都可以解释调用约定的概念吗?
functional-programming - 没有调用堆栈的架构中的尾调用
我对最近关于 GOTO 和尾递归的问题的回答是用调用堆栈来表达的。我担心它不够通用,所以我问你:尾调用(或等效)的概念在没有调用堆栈的架构中如何有用?
在继续传递中,所有被调用的函数都会替换调用函数,因此是尾调用,因此“尾调用”似乎不是一个有用的区别。在基于消息传递和事件的体系结构中,似乎没有等价物,但如果我错了,请纠正我。后两种架构是有趣的案例,因为它们与 OOP 而不是 FP 相关联。其他架构呢?旧的 Lisp 机器是基于调用堆栈的吗?
编辑:根据“ What the heck is: Continuation Passing Style (CPS) ”(以及下面的 Alex),连续传递下的尾调用的等价物不是“被调用函数替换调用函数”而是“调用函数传递了它是给定的,而不是创造一个新的延续”。与我所断言的不同,这种尾调用很有用。
另外,我对在较低级别使用调用堆栈的系统不感兴趣,因为较高级别不需要调用堆栈。这个限制不适用于亚历克斯的回答,因为他写的是其他调用架构(这是正确的术语吗?)通常有一个等效的调用堆栈,而不是他们在引擎盖下的某个地方有一个调用堆栈。在连续通过的情况下,结构就像一个树状结构,但边缘方向相反。调用堆栈等价物与我的兴趣高度相关。
c# - IIS/asp.net 中的静态方法和调用堆栈
理论问题。如果您有 100 个单独的请求进入调用下面静态方法的 aspx 网页。
每个请求都有单独的调用堆栈吗?
如果是这样 - 这个静态方法调用是否被推送到这些单独的调用堆栈上?
如果是这样-因此这些整数线程安全吗?IE。100 个请求,100 个调用帧,300 个整数。
干杯
debugging - 为什么 Minidumps 不提供良好的调用堆栈?
多年来,我在许多游戏项目中使用了 minidump,它们似乎有大约 50% 的机会拥有有效的调用堆栈。我能做些什么来让他们有更好的调用堆栈?
我尝试将最新的 dbghelp.dll 放在 exe 目录中。这似乎对一些人有所帮助。
Visual Studio 2008 或 2010 更好吗?(我仍在使用 VS 2005)。
我使用的代码看起来像这个示例。
stack-trace - 如何在 Specman 中获取堆栈跟踪?
有没有办法在 Specman 中获取堆栈跟踪?我修补了强制信号的功能,以便在强制信号时告诉我。我希望能够说出强迫的起源。
asp.net - 使用 Mdbg 的 ASP.NET 的基于 Web 的堆栈转储工具?
MySpace.com的首席系统架构师 Dan Farino做了一个精彩的演示,展示了一个基于 Web 的堆栈转储工具,该工具对给定进程中运行的所有线程进行分类(它们在做什么、它们执行了多长时间等) .)
highscalability.com上也总结了他们的技术:
- 性能收集器。
通过 UDP 集中收集性能数据。比 Windows 更可靠,允许任何客户端连接并查看统计信息。 - 基于 Web 的堆栈转储工具。
可以右键单击问题服务器并获取 .Net 托管线程的堆栈转储。过去必须 RDC 进入系统并附加调试器,然后 1/2 得到答案。缓慢、不可扩展且乏味。不仅仅是堆栈转储,还提供了有关线程正在做什么的大量上下文。故障排除更容易,因为您可以看到数据库上有 90 个线程被阻塞,因此数据库可能已关闭。 - Web 基础堆转储工具。
转储所有内存分配。对开发人员非常有用。节省手工操作的时间。• 探查器。从头到尾跟踪请求并生成报告。查看 URL、方法、状态,以及所有可以帮助您识别缓慢请求的内容。查看锁争用,是否有很多异常被抛出,任何可能有趣的东西。重量很轻。它在生产中的每个 VIP(100 台服务器组)的一个盒子上运行。每 10 秒采样 1 个线程。始终在后台跟踪。
问题是:为 ASP.NET 构建基于 Web 的堆栈转储工具需要哪些工具?为方便起见,我们假设目标 AppDomain 中托管的 *.aspx 能够输出该进程中的所有托管调用堆栈就足够了。
有几篇文章介绍了Mdbg(完全用 C#/IL 编写的托管代码的调试器,开始随 CLR 2 SDK 一起提供)和通常位于 C:\Program Files\Microsoft Visual Studio 8\SDK\ 中的mdbgcore程序集的使用。 v2.0\斌:
- http://dotnetdebug.net/2005/11/09/exceptiondbg-v01-debug-your-exceptions/
- http://blogs.msdn.com/jmstall/archive/tags/MDbg/default.aspx
- http://blogs.msdn.com/vijaysk/archive/2009/11/04/asp-net-debugger-extension-for-iis-7.aspx
解决方案是否会简单地引用此程序集来产生所需的输出?“列出所有托管调用堆栈”操作会对为生产流量提供服务的正在运行的进程产生什么影响?