标签: callstack

Jmp_buf结构中的每个条目都有什么作用?

我正在运行Ubuntu 9.10(Karmic Koala),我看了一下jmp_buf结构,它只是一个12个整数的数组.当我使用setjmp并传入jmp_buf结构时,12个条目中的4个被保存.这4个条目是堆栈指针,帧指针,程序计数器和返回地址.其他8个条目是什么?它们是机器相关的吗?段表基址寄存器的另一个条目是?还有什么需要正确恢复线程/进程的环境?我查看了手册页,其他来源,但我找不到汇编代码setjmp.

c callstack longjmp

12
推荐指数
2
解决办法
8789
查看次数

如何在iPad应用程序中遍历所有活动线程

在我正在创建的iPad应用程序中,我正在尝试通过输出异常的callStackSymbols来处理未捕获的异常.这可以通过以下方式完成[NSException callStackSymbols]

但是,我希望能够在所有其他活动线程上看到callStackSymbols.我知道我可以[NSThread callStackSymbols]在任何线程上使用,但我需要遍历所有活动线程才能这样做.

这可能吗?

multithreading callstack objective-c ios

12
推荐指数
1
解决办法
4161
查看次数

调用setTimeout是否清除了callstack?

通过使用setTimeout方法调用函数而不是直接调用函数,可以在javascript中避免堆栈溢出吗?我对setTimeout的理解是它应该启动一个新的callstack.当我查看chrome和IE的callstack时,似乎setTimeout调用正在等待函数调用返回.

这只是调试器的属性还是我的理解有缺陷?

编辑

虽然下面提供的答案是正确的,但我遇到的实际问题与我调用setTimeout(aFunction(),10)的事实有关,因为括号因此立即评估aFunction.这个问题把我排除在外.

javascript callstack settimeout

12
推荐指数
2
解决办法
8508
查看次数

在jQuery处理程序中抛出异常时,调用堆栈将丢失

我在调试我的Web应用程序时遇到问题.这是非常令人沮丧的,因为我一直试图通过一个小网页重现问题,我可以在jsfiddle上发布,但这似乎是"希格斯 - 布格森"的情况.

我有一个带有大型jQuery(document).ready()处理程序的网页.问题是当从jQuery(document).ready()处理程序中抛出异常时,我得到一个带有几个匿名函数的调用堆栈,并且没有指向实际抛出异常的代码的指针.

每当我尝试用一​​个小网页重现这种行为时,我总是得到一个指向抛出异常的代码的指针,但在生产代码中,我从来没有得到堆栈指针.这使得调试更令人沮丧且容易出错.

有没有人知道什么可能导致这种行为以及如何使它正确?


更新:我发布这个问题已有几个月了,我现在相信我已经最终重现了这个问题.我用以下HTML重现了这个问题:

<html xmlns="http://www.w3.org/1999/xhtml" >    
<body>
Factorial Page
<input type='button' value='Factorial' id='btnFactorial' />
<script src="Scripts/jquery-1.6.1.js" type="text/javascript"></script>
<script type='text/javascript'>
    $(document).ready(documentReady);

    function documentReady() {
        $('#btnFactorial').click(btnFactorial_click);

        factorial(-1);
    }

    function btnFactorial_click() {
        var x;
        x = prompt('Enter a number to compute factorial for.', '');
        alert(x + '! = ' + factorial(x));
    }

    function factorial(x) {
        if (x < 0)
            throw new Error('factorial function doesn\'t support negative numbers');
        else if (x …
Run Code Online (Sandbox Code Playgroud)

debugging jquery callstack exception-handling exception

12
推荐指数
1
解决办法
780
查看次数

如何在Visual Studio中转储或搜索所有线程的调用堆栈

如何在Visual Studio中转储或搜索所有线程的调用堆栈?我们有一个服务器进程要调试,它有数百个线程在运行,因此应该很难手动检查每个线程.

我知道gdb中的"thread apply"可以做这种事情.所以我想知道visual studio的调试器中有类似的东西.

我也在使用visual studio 2005,所以请为VS 2005提供解决方案(在VS 2010中提供所有调用堆栈中的搜索...).

debugging multithreading callstack visual-studio-2005

11
推荐指数
2
解决办法
4871
查看次数

对于C#日志记录,如何以最小的开销获取调用堆栈深度?

我已经为Log4net创建了一个包装器(我可能会支持NLog;我还没有决定),并且我缩进了记录的消息结果以给出调用结构的概念.例如:

2011-04-03 00:20:30,271 [CT] DEBUG  -     Merlinia.ProcessManager.CentralThread.ProcessAdminCommand - ProcStart - User Info Repository
2011-04-03 00:20:30,271 [CT] DEBUG  -      Merlinia.ProcessManager.CentralThread.StartOneProcess - User Info Repository
2011-04-03 00:20:30,411 [CT] DEBUG  -       Merlinia.ProcessManager.CentralThread.SetProcessStatus - Process = User Info Repository, status = ProcStarting
2011-04-03 00:20:30,411 [CT] DEBUG  -        Merlinia.ProcessManager.CentralThread.SendProcessStatusInfo
2011-04-03 00:20:30,411 [CT] DEBUG  -         Merlinia.CommonClasses.MhlAdminLayer.SendToAllAdministrators - ProcessTable
2011-04-03 00:20:30,411 [CT] DEBUG  -          Merlinia.CommonClasses.MReflection.CopyToBinary
2011-04-03 00:20:30,411 [CT] DEBUG  -           Merlinia.CommonClasses.MReflection.CopyToBinary - False
2011-04-03 00:20:30,411 [CT] DEBUG  -          Merlinia.CommonClasses.MhlBasicLayer.SendToAllConnections - 228 - True - False …
Run Code Online (Sandbox Code Playgroud)

c# logging callstack

11
推荐指数
2
解决办法
5998
查看次数

Node.js 14.15.0 中的异步堆栈跟踪

根据文档,我假设 Node.js 14 现在确实支持异步代码中的堆栈跟踪,但不幸的是,使用node --async-stack-traces test.js仍然只生成部分堆栈跟踪,我最有兴趣了解原因。

运行以下代码:

main()

function main() {
    sub();
}

async function sub() {
    console.trace('before sleep');
    await delay(1000);
    console.trace('after sleep');
}

function delay(ms) {
    return new Promise(resolve => {
        setTimeout(() => resolve(), ms);
    });
}
Run Code Online (Sandbox Code Playgroud)

显示使用之前的完整堆栈,但仅显示使用之后的部分堆栈await

~/MyDev/doberkofler/test $ node test.js
Trace: before sleep
    at sub (/Users/doberkofler/MyDev/doberkofler/test/test.js:10:10)
    at main (/Users/doberkofler/MyDev/doberkofler/test/test.js:6:2)
    at Object.<anonymous> (/Users/doberkofler/MyDev/doberkofler/test/test.js:3:1)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47
Trace: after …
Run Code Online (Sandbox Code Playgroud)

callstack node.js async-await

11
推荐指数
2
解决办法
5769
查看次数

关于函数调用堆栈的混淆

根据维基:

主叫方将返回地址压入堆栈,并且调用的子程序,当它完成,弹出返回地址关闭调用堆栈,并将控制转移到该地址.

来自Wiki的图片:

在此输入图像描述

我不太明白这一点.说我有一个C程序如下:

#include <stdio.h>

int foo(int x)
{
    return x+1;
}

void spam()
{
    int a = 1;  //local variable
    int b = foo(a);  //subroutine called
    int c = b;  //local variable
}

int main()
{
    spam();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为调用堆栈应该类似于绘图,如下所示:

<None> means none local variables or params

      _| parameters for foo() <int x>  |_
top    | local of spam() <int c>       |
^      | return address of foo()       |<---foo() called, when finishes, return here?
|      | local …
Run Code Online (Sandbox Code Playgroud)

c callstack

10
推荐指数
1
解决办法
8593
查看次数

JS:调用函数需要多长时间?

所以,我正在编写一个2d Javascript物理模拟.性能很好,但我正在进行优化以使其更好.所以,因为程序适用于很多物理几何,我在程序中进行了几个毕达哥拉斯定理计算.总之,大约有五个计算; 它们一起运行大约每秒一百万次.所以,如果我将这个简单的毕达哥拉斯定理代码放入一个新函数并调用它,我认为它会提高性能; 毕竟,浏览器的编译方式较少.所以,我在Firefox中运行代码,得到了...... 计算执行时间增加了400%.

怎么样?它是相同的代码:Math.sqrt(x*x + y*y),那么如何将它作为一个函数加减速呢?我假设原因是函数需要时间才能被调用,而不执行代码,并且每秒增加一百万个这样的延迟会减慢它的速度?

这对我来说似乎相当惊人.这也适用于预定义的js函数吗?这似乎不太可能,如果是这样,他们如何避免呢?

代码过去是这样的:

function x()
{
    dx=nx-mx;
    dy=ny-my;
    d=Math.sqrt(dx*dx+dy*dy);
    doStuff(...
}
Run Code Online (Sandbox Code Playgroud)

我试过的是这个:

function x()
{
    dx=nx-mx;
    dy=ny-my;
    d=hypo(dx,dy);
    doStuff(...
}
function hypo(x,y)
{
    return Math.sqrt(x*x+y*y);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript math performance callstack function

10
推荐指数
1
解决办法
1320
查看次数

WinDBG View将参数传递给任何函数

我正在使用windbg来调试Windows可执行文件.我想知道如何使用WinDBG查看传递给任何函数的参数.

例如,如果我想知道使用Immunity Debugger或Olly调试器传递给函数Kernel32!Cre​​atefileA的参数,我将在Kernel32!Cre​​atefileA的入口点设置一个断点.

现在在调试器窗口的右下角,我可以很好地看到程序传递给Kernel32!Cre​​atefileA的参数是什么.喜欢这个截图.

![截图

所以我的问题是如何使用WinDBG.Is获得类似的传递参数视图?

是否有任何插件可以在视觉上像olly或免疫力一样代表堆栈?

提前致谢

debugging callstack windbg

10
推荐指数
1
解决办法
1万
查看次数