标签: callstack

你如何找到呼叫者功能?

封闭为"如何找到调用当前方法的方法?"的完全重复.

是否可能与C#?

void main()
{
   Hello();
}

void Hello()
{
  // how do you find out the caller is function 'main'?
}
Run Code Online (Sandbox Code Playgroud)

c# language-features callstack

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

什么是执行框架?

在C#中,什么是执行帧(也与此有关,我听说过激活帧).IIRC它是一个方法参数去的槽,但不记得所有的细节.

谢谢

c# stack callstack

5
推荐指数
2
解决办法
1176
查看次数

Java中的继承

最近我经历了继承概念.

众所周知,在继承中,superclass对象是在subclass对象之前创建/初始化的.因此,如果我们创建一个对象subclass,它将包含所有超类信息.

但我一度陷入困境.

超类和子类方法是否存在于单独的调用堆栈中?如果是这样,有没有specific reason相同的?如果不是这样,为什么它们不会出现在同一个调用堆栈中?

例如

// Superclass
class A {
    void play1( ) {
        // ....
    }
}

// Subclass
class B extends A {  
    void play2( ) {  
        //.....   
    }
}
Run Code Online (Sandbox Code Playgroud)

然后确实上述2种方法,即play1( )play2( )显示在单独的调用堆栈?

谢谢.

java inheritance callstack

5
推荐指数
1
解决办法
202
查看次数

C++从std :: exception获取调用堆栈

当std :: exception引发时,如何打印完整的调用堆栈?

c++ callstack exception

5
推荐指数
1
解决办法
4106
查看次数

如何从解释器堆栈中获取绑定方法的类的名称?

我有一个很棒的小功能,看起来像这样:

def verbose_print(message, *args, **kwargs):
    """Prints `message` with a helpful prefix when in verbose mode

    Args:
        message (str): The message to print. Can be a format string, e.g.
            `A %s with some %s in it`
        *args: Variables for the message format
        **kwargs: Keyword variables for the message format
    """

    # Only print when in verbose mode
    if not config.verbose:
        return

    # Ready a prefix for the message
    try:
        s = inspect.stack()
        module_name = inspect.getmodule(s[1][0]).__name__
        func_name = s[1][3]
        prefix = '### …
Run Code Online (Sandbox Code Playgroud)

python callstack class

5
推荐指数
1
解决办法
269
查看次数

VC++中的堆栈大小是多少?

我想要有关VC++(32位和64位)中堆栈溢出的准确信息,特别是在递归中.在调试模式下,这种情况很快发生在递归中(如4500运行简单的递归函数不做任何事情或类似).但是,似乎发布模式不同.这很难理解,我现在没有测试它,因为优化会删除不做任何事情的代码(显然会删除递归),因为我的代码或函数是这样的......我应该做更多...我测量在优化版本中的正确时间,我不知道优化是否会通过递归实现更复杂的快速排序?

谢谢!

c recursion stack callstack visual-c++

5
推荐指数
1
解决办法
1167
查看次数

C++中的函数调用堆栈

我尝试了以下链接,来自StackOverflow和其他网站,[我试过,但它没有帮助我,所以我无法避免重复]

Windows上的StackWalk64 - 获取符号名称

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

http://www.codeproject.com/KB/threads/StackWalker.aspx

http://jpassing.com/2008/03/12/walking-the-stack-of-the-current-thread/

如何使用Windows x64记录堆栈帧 ...

但是没有一个代码适用于我.我是Windows C++环境的新手,我无法获得上述任何代码.

我正在寻找一个调用堆栈格式,如
FUNCTION_NAME_DEPTH_1:_LINE_NUM__
FUNCTION_NAME_DEPTH_1:_LINE_NUM__
FUNCTION_NAME_DEPTH_1:_LINE_NUM__ ...

只是功能名称和行​​号.

我的环境:
Visual Studio 2010
SDK:v7.1
Windows 7 Pro SP1

如果有人发布一个头文件,[似乎很少可用,但没有工作],我们可以包含在我们的cpp文件中并使用像'PrintFunctionCallStack();这样的调用打印调用堆栈,这将是很简单的..BTW在Linux/Mac中,它变得容易多了,我能够从回溯中获得调用堆栈,而且它非常简单,我自己在几分钟内完成了它.在Windows中,我已经尝试了两天,但毫不奇怪.

Linux/Mac堆栈跟踪代码,我还没有解码符号名称.

#ifndef _STACKTRACE_H_
#define _STACKTRACE_H_

#include <stdio.h>
#include <stdlib.h>
#include <execinfo.h>
#include <cxxabi.h>
#include <iostream>

static inline void PrintStackTrace()
{
        cout<<"##############################################\n";
        unsigned int maxStackCount = 63;
        void* addressList[maxStackCount+1];
        int addrLen = backtrace(addressList, sizeof(addressList) / sizeof(void*));
        if (addrLen == 0) {
            cout<<"Empty Stack, Probably Corrupted it seems ###\n";
            return;
        }
        char** symbolList = …
Run Code Online (Sandbox Code Playgroud)

c++ windows debugging callstack

5
推荐指数
1
解决办法
7929
查看次数

(如何)在断点处导出调用堆栈?

当代码在断点处停止时,有没有办法导出调用堆栈?

我有很长的ID字符串,我需要抓住在另一个程序中使用(见图),从屏幕截图重新输入并不是一个选项;-)

我在XE2 IDE中点击但找不到任何东西.

(解决方法:现在我继续在断点之后逐步执行代码,直到我已经移动到足够远的堆栈,局部变量再次可用.)

在此输入图像描述

ide delphi callstack breakpoints delphi-xe2

5
推荐指数
1
解决办法
239
查看次数

AngularJS查找谁更改了$ watch监视的对象

我正在使用Angular-Bootstrap Carousel指令,并在其上进行一些更改。轮播有ng-repeat幻灯片。

我试图通过将左右控件悬停而不是单击来转到下一张/上一张幻灯片。并通过更改object.active状态来实现(以前为false-新为true)

无论如何,几轮之后,我所有的物体都active=false摆好了,转盘什么也没显示。在调试数组并$watch在每个对象上发现错误后,是因为该指令以某种方式更改了active=false我不希望的时间。

长话短说:我能以某种方式获取我正在使用的范围内的对象的调用堆栈$watch吗?

例如,我的监视代码如下:

$scope.$watch('requestFilters[0]', function(obj) {
    console.log('Item 0 changed');
}, true);
Run Code Online (Sandbox Code Playgroud)

callstack hover carousel angular-bootstrap angularjs-watch

5
推荐指数
0
解决办法
638
查看次数

调试堆栈损坏问题

我正在使用C++(Visual Studio 2015)调试大型应用程序上的"访问冲突"异常.该应用程序是由几个库构建的,其中一个(SystemC)会出现问题,尽管我怀疑问题的根源在其他地方.

我看到的是一个函数调用,它破坏了调用者的成员函数的地址.

m_update_phase = true;
m_prim_channel_registry->perform_update();
m_update_phase = false;
Run Code Online (Sandbox Code Playgroud)
inline
void
sc_prim_channel_registry::perform_update()
{
    for( int i = m_update_last; i >= 0; -- i ) {
    m_update_array[i]->perform_update();
    }
    m_update_last = -1;
}
Run Code Online (Sandbox Code Playgroud)

(这些是从摘录systemc\kernel\sc_simcontext.cppsystemc\communication\sc_prim_channel.h,所述的部分SystemC的库)

通过上面的代码多次迭代后发生错误.调用m_prim_channel_registry->perform_update()抛出0xC0000005: Access violation writing location 0x0F4CD9E9.异常.
只有在Release配置中构建应用程序时才会发生这种情况

看看汇编代码,我看到函数sc_prim_channel_registry::perform_update()是内联的,内部函数调用m_update_array[i]->perform_update()似乎破坏了调用函数的堆栈框架.
m_update_last = -1;被执行时,与m_update_last不再指向有效的存储位置,并抛出异常.
(m_update_last是类的一个简单的天然成员sc_prim_channel_registry具有类型int)

    m_update_phase = true;
    m_prim_channel_registry->perform_update();
1034D99E  mov         eax,dword ptr [esi+10h]  
1034D9A1 …
Run Code Online (Sandbox Code Playgroud)

c++ callstack corruption systemc

5
推荐指数
1
解决办法
525
查看次数