Tag: 调用堆栈

“RangeError:超出最大调用堆栈大小”为什么?

如果我跑 Array.apply(null, new Array(1000000)).map(Math.random); 在Chrome 33上,我明白了 RangeError: Maximum call stack size exceeded 为什么?

Node.js – 超过最大调用堆栈大小

当我运行我的代码,Node.js抛出"RangeError: Maximum call stack size exceeded"exception引起的recursion调用太多。 我试图通过sudo node –stack-size=16000 app来增加Node.js的堆栈大小,但Node.js崩溃而没有任何错误信息。 当我没有sudo再次运行这个,然后Node.js打印'Segmentation fault: 11' 。 有没有可能解决这个问题,而不删除recursion调用? 谢谢

我怎样才能得到在Perl中的调用堆栈列表?

有没有一种方法,我可以访问(打印输出)sub +模块列表任意深度的子脚本之前的Perl脚本中的当前位置? 我需要修改一些Perl模块(.pm's)。 工作stream程是通过一个CGI脚本从一个网页开始的,将input传递到需要使用数据的模块中的几个模块/对象。 数据发生了变化,我需要找出在哪里。

我如何重新抛出一个Javascript中的exception,但保留堆栈?

在Javascript中,假设我想在发生exception时执行一些清理,但让exception继续向上传播堆栈,例如: try { enterAwesomeMode(); doRiskyStuff(); // might throw an exception } catch (e) { leaveAwesomeMode(); throw e; } doMoreStuff(); leaveAwesomeMode(); 这个代码的问题是,捕获并重新抛出exception会导致直到那一点的堆栈跟踪信息丢失,所以如果这个exception随后被捕获,堆栈上的高位,堆栈跟踪只能到达-扔。 这很糟糕,因为这意味着它不包含实际抛出exception的函数。 事实certificate,try..finally至less在Chrome中具有相同的行为(也就是说,不是重新抛出问题,而是存在任何exception处理程序块)。 有谁知道重新抛出一个例外的Javascript的方法,但保留与它相关的堆栈跟踪? 否则,如何增加exception安全的清理处理程序的其他方式的build议,以及发生exception时捕获完整的堆栈跟踪呢? 感谢任何指针:)

简单地解释堆栈框架的概念

看来,我在编程语言devise中得到了调用堆栈的概念。 但我找不到(可能我只是不够努力地search)什么样的堆栈框架的正确解释。 所以我想请一个人用几句话向我解释一下。

数组指向衰减并将multidimensional array传递给函数

我知道一个数组衰减到一个指针,如果一个声明 char things[8]; 然后在其他地方使用的things , things是一个指向数组中的第一个元素的指针。 另外,从我的理解,如果一个声明 char moreThings[8][8]; 那么moreThings 不是指向char的types指针,而是types“指向char的指针数组”,因为衰减只发生一次。 当更多的moreThings传递给一个函数(比如用原型void doThings(char thingsGoHere[8][8])来实现的时候,堆栈实际上是怎么回事? 如果moreThings不是指针types,那么这真的还是一个通过引用? 我想我一直认为moreThings仍然代表了multidimensional array的基地址。 如果doThings把input的thingsGoHere ,它自己把它传递给另一个函数呢? 规则非常多,除非指定一个数组input为const那么该数组将永远是可修改的? 我知道types检查的东西只发生在编译时,但我仍然困惑什么在技术上被视为通过引用传递(即只有当types指针的parameter passing,或指针数组是通过 – 通过引用以及?) 对不起,这个问题到处都是,但是由于我很难理解这个问题,所以很难说清楚一个确切的问题。

用C或C ++打印调用堆栈

每次调用某个函数时,有没有办法在C或C ++的运行进程中转储调用堆栈? 我想到的是这样的: void foo() { print_stack_trace(); // foo's body return } print_stack_trace与Perl中的caller类似。 或者像这样的东西: 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上工作。 背景 我有一个testing运行的行为不同,基于一些命令行开关,不应该影响这种行为。 我的代码有一个伪随机数生成器,我假设这些开关的调用是不同的。 我希望能够用每一组开关来运行testing,看看每一个随机数发生器是不同的。

为什么当我写入数组的末尾时,程序不会崩溃?

为什么下面的代码在运行时没有任何崩溃? 而且大小完全取决于机器/平台/编译器!! 我甚至可以在一台64位机器上使用200个。 如何在操作系统中检测到主函数中的段错误? void main(int argc, char* argv[]) { int arr[3]; arr[4] = 99; } 这个缓冲空间从哪里来? 这是分配给一个进程的堆栈吗?

你如何findJavaScript中的调用者函数?

function main() { Hello(); } function Hello() { // How do you find out the caller function is 'main'? } 有没有办法找出调用堆栈呢?