Questions tagged «callstack»

一个堆栈,用于按顺序存储程序调用的函数的详细信息,以便每个函数可以在完成后返回到调用它的代码。


29
最大调用堆栈大小超出错误
我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小。 该错误的确切含义是什么,它会完全停止处理吗? 也包括对Safari浏览器的任何修复(实际上在上iPad Safari, JS:执行超出超时 我假设是相同的调用堆栈问题)

6
简要说明堆栈框架的概念
看来我在编程语言设计中有了调用堆栈的想法。但是我找不到(也许我只是不够努力地)关于什么是堆栈框架的任何体面的解释。 所以我想请某人向我解释一下。
200 callstack 

2
如何在Javascript中抛出异常,但保留堆栈?
在Javascript中,假设我想在发生异常时执行一些清除操作,但是让异常继续在堆栈中传播,例如: try { enterAwesomeMode(); doRiskyStuff(); // might throw an exception } catch (e) { leaveAwesomeMode(); throw e; } doMoreStuff(); leaveAwesomeMode(); 此代码的问题在于,捕获并重新抛出异常会导致丢失到该点的堆栈跟踪信息,因此,如果随后再次捕获到异常,则该堆栈跟踪在堆栈的较高位置,则堆栈跟踪只会下降到-扔。这很烂,因为这意味着它不包含实际引发异常的函数。 事实证明,try..finally在至少Chrome中具有相同的行为(也就是说,精确地不是问题是重新抛出,而是所有异常处理程序块的存在。) 有谁知道一种在Java中重新抛出异常但保留与之关联的堆栈跟踪的方法吗?失败了,如何建议其他方法来添加异常安全的清理处理程序,同时在发生异常时捕获完整的堆栈跟踪信息? 感谢您的任何指点:)

13
使用C或C ++打印调用堆栈
每当调用某个函数时,是否有任何方法可以在C或C ++的运行进程中转储调用堆栈?我想到的是这样的: void foo() { print_stack_trace(); // foo's body return } Where的print_stack_trace工作方式与callerPerl 类似。 或类似这样的东西: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } 在其中register_stack_trace_function放置某种内部断点,该断点将在每次foo调用时打印堆栈跟踪。 某些标准C库中是否存在类似的内容? 我正在使用GCC在Linux上工作。 背景 我有一个测试运行,该行为基于一些不应影响此行为的命令行开关而有所不同。我的代码有一个伪随机数生成器,我认为根据这些开关,它们会被不同地调用。我希望能够使用每组开关来运行测试,并查看每个随机数生成器的调用方式是否有所不同。
120 c++  c  linux  callstack 


7
调用堆栈如何工作?
我试图更深入地了解编程语言的低级操作是如何工作的,尤其是它们如何与OS / CPU交互。我可能已经在Stack Overflow上的每个与堆栈/堆相关的线程中阅读了每个答案,它们都很出色。但是还有一件事我还没有完全理解。 在伪代码中考虑这个函数,它通常是有效的Rust代码;-) fn foo() { let a = 1; let b = 2; let c = 3; let d = 4; // line X doSomething(a, b); doAnotherThing(c, d); } 这就是我假设堆栈看起来像第X行的样子: Stack a +-------------+ | 1 | b +-------------+ | 2 | c +-------------+ | 3 | d …


4
堆栈变量是否由GCC __attribute __((aligned(x)))对齐?
我有以下代码: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } 我有以下输出: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac 为什么地址a[0]不是的倍数0x1000? 到底__attribute__((aligned(x)))是什么?我误解了这个解释吗? 我正在使用gcc 4.1.2。


17
堆栈如何以汇编语言工作?
我目前正在尝试了解堆栈的工作原理,因此我决定自学一些汇编语言,我正在使用这本书: http://savannah.nongnu.org/projects/pgubook/ 我正在使用Gas并在Linux Mint上进行开发。 我对某些东西感到困惑: 据我所知,堆栈只是一个数据结构。因此,我假设如果我要在汇编中进行编码,则必须自己实现堆栈。但是,似乎并非如此,因为有些命令像 pushl popl 因此,在为x86体系结构进行汇编代码编写并使用Gas语法时:堆栈只是已经实现的数据结构吗?还是实际上是在硬件级别实现的?或者是别的什么?另外,大多数其他芯片组的汇编语言是否已经实现了堆栈? 我知道这是一个愚蠢的问题,但是我对此感到非常困惑。

10
Node.js-超出最大调用堆栈大小
当我运行代码时,Node.js会"RangeError: Maximum call stack size exceeded"引发由过多的递归调用引起的异常。我尝试将Node.js堆栈大小增加sudo node --stack-size=16000 app,但Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将显示'Segmentation fault: 11'。是否有可能在不删除递归调用的情况下解决此问题?


9
我如何打印被调用的函数
在调试Python脚本时,我真的很想知道整个程序的整个调用堆栈。理想的情况是,如果有一个用于python的命令行标志,它将导致Python在调用它们时打印所有函数名(我检查了man Python2.7,但是没有找到这种类型的东西)。 由于此脚本中函数的数量众多,因此,我尽量不要在每个函数和/或类的开头添加打印语句。 一个中间的解决方案是使用PyDev的调试器,放置几个断点并检查程序中给定点的调用堆栈,因此我暂时将使用这种方法。 如果存在这样的方法,我仍然希望查看程序整个生命周期内调用的所有函数的完整列表。
69 python  callstack 

1
为什么在加载.COM文件后DOS将SP寄存器设置为0xFFFE?
在有关.COM文件https://en.wikipedia.org/wiki/COM_file的wikpedia页面上,其内容为: DOS中的.COM文件将所有x86段寄存器设置为相同的值,而SP(堆栈指针)寄存器设置为0xFFFE,因此,堆栈从内存段的最顶部开始,并从那里开始向下工作。 但这实际上将堆栈设置为在该段的顶部下方开始一个单词。当将值压入堆栈时,CPU会将SP递减至0xFFFC并将其存储在该值中,从而浪费了该段的最高字。DOS不将SP设置为0的原因是什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.