标签: callstack

在Python中确定特定函数是否在堆栈上的有效方法

对于调试,通常有用的是判断特定函数是否在调用堆栈中更高.例如,我们通常只想在某个函数调用我们时运行调试代码.

一种解决方案是检查更高的所有堆栈条目,但这是在堆栈深处并重复调用的函数中,这会导致过多的开销.问题是找到一种方法,允许我们以合理有效的方式确定特定函数是否在调用堆栈上更高.

类似

python callstack

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

Xcode - 在断言上调用堆栈跟踪?

现在,当我的一个断言在Xcode中被触发时,我得到了断言消息,以及堆栈的转储,其中充满了对我来说没有意义的数字.

为了获得调用堆栈的跟踪,它需要我调试应用程序,并将其运行到发生断言的位置,并希望它再次断言.对于100%可重现的错误,这不是一个太大的问题,但仍然是浪费时间.

如果我在每次命中一个断言时得到一个调用堆栈跟踪,那会好得多.

如何定义将在Xcode中转储调用堆栈跟踪的断言宏?

xcode callstack assert objective-c

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

如何在不使用引发异常的情况下使用JCL记录callstack

背景

我们遇到一个问题,有时Devexpress中的网格会引发异常"引发的EConvertError:无法为TFont分配nil".

但是为了追踪这个的真正原因,我们已经将cxEdit中的Font更改为公共属性,而不是使用get和set方法.在这里,我想记录callstack.

我的问题

通常,JCL用于在出现异常时记录callstack.但是,如何在不使用raise异常的情况下记录callstack并为用户显示关于此的对话框?

我找到了这些台词:

var
  GlobalStackList: TJclGlobalStackList;
Run Code Online (Sandbox Code Playgroud)

在JclDebug但我没有使用它.如果有人有一个例子如何获得callstack我会很高兴.

关心Roland Bengtsson

delphi callstack jedi-code-library

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

c ++ stacktrace从函数抛出异常?

我可以利用gcc的backtrace在程序的任何给定点获得堆栈跟踪,但是我想从抛出异常时堆栈所处的任何帧中获取跟踪,即在堆栈展开之前.

例如,以下块

func() {
  throw std::exception();
}

try {
  func();
}
catch ( std::exception ) {
  std::cout << print_trace();
  //do stuff
}
Run Code Online (Sandbox Code Playgroud)

应该还能以某种方式为func()保留一个框架.

以前曾经问过这个问题,但它涉及到一个未处理的异常会终止该程序,并且可能没有给callstack一个放松的机会?

有没有办法做到这一点,同时仍能正常捕获和处理异常?

可能有一种方法,比如为所有异常设置处理程序,除了生成跟踪并重新抛出异常之外什么都不做.理想情况下,我应该能够在Exception类构造函数中生成跟踪,但是在这里我不一定能控制可能遇到的异常.

c++ gcc callstack exception-handling stack-trace

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

Smalltalk如何操纵调用堆栈帧(thisContext)?

Smalltalk对象thisContext看起来奇怪而奇妙.我无法理解它是什么以及它是如何工作的.甚至它如何实现延续.

对于C的调用栈,我可以很容易地想象它是如何实现和工作的.但为此......我做不到.请帮我理解一下.

continuations callstack smalltalk stack-frame

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

获取最后抛出的异常的引用

在python和/或ipython交互式解释器中,如何在最后一个未处理的异常上绑定名称?即相当于

>>> try:
...     1/0
... except Exception as potato:
...     pass
... 
>>> format(potato)
'integer division or modulo by zero'
Run Code Online (Sandbox Code Playgroud)

必须像......

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> import sys
>>> potato = ???
Run Code Online (Sandbox Code Playgroud)

python callstack exception-handling exception stack-trace

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

如何更好地在C/C++中打印调用堆栈?

我想打印调用堆栈与更多信息,如在gdb中.

这就是我到目前为止所拥有的.

void to_print_callstack()
{
    void *buffer[100];
    int n = backtrace(buffer,10);
    char **str = backtrace_symbols(buffer, n);

    for (int i = 0; i < n; i++)
    {
        printf("%d:  %s\n", i, str[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

当它运行时,我得到如下的东西.

0:  ./test-prog() [0x4466bf]
1:  ./test-prog() [0x445e1d]
2:  ./test-prog() [0x443fd5]
3:  ./test-prog() [0x439a99]
4:  ./test-prog() [0x43302f]
5:  ./test-prog() [0x4322c9]
6:  ./test-prog() [0x4320cd]
7:  ./test-prog() [0x43e76b]
8:  /lib/libc.so.6(__libc_start_main+0xfd) [0x7fc4de7d8c4d]
9:  ./test-prog() [0x431569]
Run Code Online (Sandbox Code Playgroud)

很难读懂.使用函数名称会更好.非常感谢小费.

c c++ callstack

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

是否可以在调试时看到Visual Studio中正在执行的功能的列表而不会中断?

我曾经使用过Call Stack,Call Hierarchy和Profiler。这些工具都没有在Visual Studio窗口中为我提供简单,实时的 “刚刚执行的功能列表”...。单击按钮或链接将我引导到特定的代码文件和行(如果可用)时,我需要查看一些内容。

我什么都没找到。也许,即使PDB FULL已打开,此类信息也不可用。我相信在这一点上,我必须编写一个Visual Studio 2012外接程序或扩展程序来执行我需要的操作,但同时我也遇到了问题:就一个而言,我无法从任何可行的方法中获得函数名。界面,除非我暂停调试器或遇到断点。其次,我要列出的应用程序是一个MVC应用程序,该应用程序在“ WebDev.WebServer40.exe”下作为DLL运行。

我认为这将非常简单:从扩展名创建一个工具窗口,并记录最后执行的方法以及参数列表。

有任何想法吗?提前谢谢了!!

编辑:为了更加清晰

c# debugging asp.net-mvc callstack visual-studio

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

如何在Delphi调用堆栈窗口中隐藏"非用户"堆栈帧?

在Delphi调用堆栈中,是否可以隐藏/折叠没有源代码的堆栈帧,相应地,没有用这些蓝点标记?

仅供参考,Visual Studio可以执行此操作:

在托管代码中,默认情况下."调用堆栈"窗口隐藏非用户代码的信息.出现以下符号而不是隐藏信息:

[<外部代码>]

http://msdn.microsoft.com/en-us/library/a3694ts5.aspx

如果解决方案适用于Delphi XE2,那将会很好.

UPDATE

它可以是一些第三方专家,甚至是使用ToolsAPI的代码

delphi debugging callstack toolsapi delphi-xe2

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

用C++将调用堆栈扩展到磁盘?

当涉及大规模递归方法调用时,必须通过修改适当的编译器参数来扩展调用堆栈大小,以避免堆栈溢出.

让我们考虑编写一个便携式应用程序,其布局足够简单,以便其用户只需要最少的技术知识,因此手动虚拟内存配置是不可能的.

运行大规模递归方法(显然是在幕后)可能会导致超出调用堆栈限制,尤其是在应用程序运行的机器受内存限制的情况下.

足够的聊天:在C++中,如果内存(几乎)已满,可以手动将调用堆栈扩展到磁盘吗?

c++ callstack

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