草庐IT

Callstack

全部标签

c++ - 有没有办法在 gdb 中设置一个以调用堆栈为条件的断点?

我正在Linux上的gdb7.1中调试C++。我有一个函数a()在代码的很多地方都被调用。我想在其中设置一个断点,但前提是它是从b()调用的。有什么办法吗?只有在c()调用b()时,有什么办法可以做到这一点,以此类推吗? 最佳答案 更新:现在有一个betteranswer对于这个问题:使用GDB_is_caller便利函数。您描述的需求经常出现,通常是在some_utility_fn被大量调用的上下文中,但您只对来自some_other_fn的调用感兴趣。您可以使用来自CVS主干的GDB中新的嵌入式Python支持来编写整个交互的脚

c++ - _chkstk() 函数的目的是什么?

我最近使用了/FAsuVisualC++compileroption输出一个特别长的成员函数定义的源+程序集。在汇编输出中,堆栈帧建立后,有一个神秘的_chkstk()函数调用。_chkstk()上的MSDN页面没有解释调用这个函数的原因。我还看到了StackOverflow问题Allocatingabufferofmoreapagesizeonstackwillcorruptmemory?,但我不明白OP和接受的答案在说什么。_chkstk()CRT函数的用途是什么?它有什么作用? 最佳答案 Windows页面在使用时为您的线程提

c++ - _chkstk() 函数的目的是什么?

我最近使用了/FAsuVisualC++compileroption输出一个特别长的成员函数定义的源+程序集。在汇编输出中,堆栈帧建立后,有一个神秘的_chkstk()函数调用。_chkstk()上的MSDN页面没有解释调用这个函数的原因。我还看到了StackOverflow问题Allocatingabufferofmoreapagesizeonstackwillcorruptmemory?,但我不明白OP和接受的答案在说什么。_chkstk()CRT函数的用途是什么?它有什么作用? 最佳答案 Windows页面在使用时为您的线程提

来自未处理异常的 C++ 堆栈跟踪?

这个问题以前被问过,并且有特定于windows的答案,但没有令人满意的gcc答案。我可以使用set_terminate()设置一个函数,当抛出未处理的异常时将调用该函数(代替terminate())。我知道如何使用回溯库从程序中的给定点生成堆栈跟踪。但是,当调用我的终止替换时,这将无济于事,因为此时堆栈已被展开。然而,如果我只是允许程序abort(),它将产生一个核心转储,其中包含从引发异常的点开始的完整堆栈信息。所以信息就在那里——但是有没有一种程序化的方式来获取它,例如可以记录它,而不必检查核心文件? 最佳答案 编辑答案:您可以

来自未处理异常的 C++ 堆栈跟踪?

这个问题以前被问过,并且有特定于windows的答案,但没有令人满意的gcc答案。我可以使用set_terminate()设置一个函数,当抛出未处理的异常时将调用该函数(代替terminate())。我知道如何使用回溯库从程序中的给定点生成堆栈跟踪。但是,当调用我的终止替换时,这将无济于事,因为此时堆栈已被展开。然而,如果我只是允许程序abort(),它将产生一个核心转储,其中包含从引发异常的点开始的完整堆栈信息。所以信息就在那里——但是有没有一种程序化的方式来获取它,例如可以记录它,而不必检查核心文件? 最佳答案 编辑答案:您可以

c++ - C++中异常的调用栈

今天,在我的C++多平台代码中,我对每个函数都有一个try-catch。在每个catchblock中,我将当前函数的名称添加到异常并再次抛出它,以便在最上面的catchblock(我最终打印异常的详细信息)中,我拥有完整的调用堆栈,这有助于我跟踪异常的原因。这是一种好的做法,还是有更好的方法来获取异常的调用堆栈? 最佳答案 你正在做的不是好习惯。原因如下:1.没必要。如果您在Debug模式下编译项目以便生成调试信息,您可以轻松地在GDB等调试器中获取异常处理的回溯。2.很麻烦。这是您必须记住添加到每个功能的内容。如果你碰巧错过了一个

c++ - C++中异常的调用栈

今天,在我的C++多平台代码中,我对每个函数都有一个try-catch。在每个catchblock中,我将当前函数的名称添加到异常并再次抛出它,以便在最上面的catchblock(我最终打印异常的详细信息)中,我拥有完整的调用堆栈,这有助于我跟踪异常的原因。这是一种好的做法,还是有更好的方法来获取异常的调用堆栈? 最佳答案 你正在做的不是好习惯。原因如下:1.没必要。如果您在Debug模式下编译项目以便生成调试信息,您可以轻松地在GDB等调试器中获取异常处理的回溯。2.很麻烦。这是您必须记住添加到每个功能的内容。如果你碰巧错过了一个

multithreading - 在 amd64 上拆分堆栈是不必要的

似乎有一种观点认为,在64位架构上没有必要使用“拆分堆栈”运行时模型。我说好像是,因为我还没有看到有人真的这么说,只是围着它跳舞:Thememoryusageofatypicalmulti-threadedprogramcandecreasesignificantly,aseachthreaddoesnotrequireaworst-casestacksize.Itbecomespossibletorunmillionsofthreads(eitherfullNPTLthreadsorco-routines)ina32-bitaddressspace.--IanLanceTaylor.

multithreading - 在 amd64 上拆分堆栈是不必要的

似乎有一种观点认为,在64位架构上没有必要使用“拆分堆栈”运行时模型。我说好像是,因为我还没有看到有人真的这么说,只是围着它跳舞:Thememoryusageofatypicalmulti-threadedprogramcandecreasesignificantly,aseachthreaddoesnotrequireaworst-casestacksize.Itbecomespossibletorunmillionsofthreads(eitherfullNPTLthreadsorco-routines)ina32-bitaddressspace.--IanLanceTaylor.

objective-c - 如何将堆栈跟踪打印到控制台/登录 Cocoa?

我想在某些时间点记录调用跟踪,例如失败的断言或未捕获的异常。 最佳答案 此代码适用于任何线程:NSLog(@"%@",NSThread.callStackSymbols);Returnsanarraycontainingthecallstacksymbols.EachelementisanNSStringobjectwithavalueinaformatdeterminedbythebacktrace_symbols()function. 关于objective-c-如何将堆栈跟踪打印到