backtrace相关内容

Windows 上的 StackWalk64 - 获取符号名称

好的,一天后关于 SO 的第二个问题.看起来 Windows 编程让我很开心……:S 我目前正在尝试获取 Win32 可执行文件上的函数调用堆栈. 今天早上,我还问了一个关于这个的问题: Win32 - 来自 C 代码的回溯 现在,我很确定 StackWalk64 函数是实现此目的的关键.我已经阅读了一些关于如何使用它的文章,以及 MS 文档. 它实际上在我的测试程序 ..
发布时间:2022-01-22 12:13:03 其他开发

如何获取 GDB 中所有线程的回溯?

GDB 中是否有与 WinDbg 的 !process 0 7 等效的命令? 我想提取转储文件中的所有线程以及它们在 GDB 中的回溯.info threads 不输出堆栈跟踪.那么,有没有这样的命令呢? 解决方案 一般情况下使用backtrace来获取当前线程的堆栈,但是如果有必要获取所有线程的堆栈跟踪,使用下面的命令. 线程应用所有bt ..
发布时间:2022-01-20 20:02:21 其他开发

在 Ruby 解释器段错误之后,是否可以从 corefile 中获取 Ruby 回溯?

注意:我正在使用我在使用 libxml-ruby gem 时遇到的段错误来说明问题,但我已经用所述 gem 解决了我的问题.这个问题的真正含义是从 ​​gdb 中查看 Ruby 回溯(即解释器在 Ruby 代码无法处理异常时打印的相同内容),其中包含解释器本身遇到分段错误的核心文件. 我在生成 XML 文档时遇到了一个奇怪的段错误: /railsroot/vendor/isolated/r ..
发布时间:2022-01-12 16:20:24 其他开发

如何在 PHP 中获取调用函数/方法的名称?

我知道函数 debug_backtrace,但我正在寻找一些现成的函数实现,例如 GetCallingMethodName()?如果它也给出方法的类就完美了(如果它确实是一个方法). 解决方案 debug_backtrace() 函数是了解这一点的唯一方法,如果您很懒惰,这也是您应该编写代码的另一个原因GetCallingMethodName() 自己.与懒惰作斗争!:D ..
发布时间:2021-12-14 08:11:40 PHP

glibc backtrace() 如何确定哪些堆栈内存是返回地址?

就程序而言,堆栈只是一堆内存.回溯函数如何确定哪些堆栈字节是指令指针返回地址,而不是哪些只是函数参数等? 解决方案 对程序而言,栈就是一堆内存. 没错.如果您对程序的结构一无所知,您将无法展开其堆栈. 用于展开的最简单的结构是单个“帧指针"保留寄存器以始终指向当前帧,并且该帧包含位于已知偏移量处的上一个帧指针. 这是在i*86上使用了很长时间的机制,并且仍然在许多RI ..
发布时间:2021-11-17 22:38:10 其他开发

ARM 平台上没有来自 SIGABRT 信号的回溯?

我在信号处理程序中使用“backtrce()"和“backtrace_symbols_fd()"函数来生成用于调试的回溯(GDB 不可用). 它们在 x86 桌面 (Ubuntu) 上运行良好,但 在目标设备(基于 ARM)上,Abort 信号的回溯(由于双重释放错误)仅显示三帧:信号处理程序和两个来自 libc 中的,这对调试我们的代码没有用!SEGV 上的回溯(例如使用错误的指针)确实会 ..
发布时间:2021-11-17 22:07:52 服务器开发

任何可用于 uclibc 的回溯移植?

我们在 ARM 9 上运行 uclibc linux.问题是 uclibc 不支持回溯.当发生核心转储时,我无法获取调用堆栈. 有没有人有好的解决方案? 例如,现有的 uclibc 回溯移植,或者在发生核心转储时获取调用堆栈的任何好方法 (uclibc+ARM+Linux)? 解决方案 更新: 似乎是一个补丁 的创建是为了在 x86 和 ARM (XScale) 的 uc ..
发布时间:2021-11-17 21:46:24 服务器开发

获取调用者的返回地址

我想弄清楚如何在 MSVC 中获取调用者的返回地址.我可以使用 _ReturnAddress() 来获取我的函数的返回地址,但我似乎无法找到获取调用者的方法. 我尝试过使用 CaptureStackBackTrace,但由于某种原因,它在多次调用后崩溃.我也更喜欢通过内联汇编的解决方案. void my_function(){cout ..
发布时间:2021-09-18 19:05:38 C/C++开发

在 MAXIMA 中,如何打印整个调用堆栈?

抱歉,如果这是一个新手问题,但我找不到关于此的任何文档或其他 stackoverflow 问题.我想查看在求解表达式或方程时调用的所有最大值函数的整个堆栈跟踪.我尝试了跟踪、回溯和调试模式.查看了不同的显示和打印功能,但都不起作用. 示例 1: (%i1) is(equal( (a+b)^2, a^2+b^2+2*a*b ));(%o1) 真 示例 2: (%i2) trace(fac ..
发布时间:2021-09-09 19:00:26 其他开发

x86_64 调用约定和堆栈帧

我试图理解 GCC (4.4.3) 为在 Ubuntu Linux 下运行的 x86_64 机器生成的可执行代码.特别是,我不明白代码如何跟踪堆栈帧.在过去,在 32 位代码中,我习惯于在几乎每个函数中看到这个“序言": push %ebpmovl %esp, %ebp 然后,在函数结束时,会出现一个“尾声",要么 sub $xx, %esp # 其中 xx 是基于 GCC 的记帐的数字.弹 ..
发布时间:2021-08-28 18:36:37 其他开发

在每个 PHP 回溯级别获取范围内的变量?

有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近 debug_backtrace(true) 的组合来获取对象,在每个对象上使用 get_object_vars 来获取 $this vars,args> 在每个回溯帧中键入键,并使用 get_defined_vars 获取全局变量,但是在函数中设置的任何临时变量我都找不到检索方法. 这是一个示例情况: function meth ..
发布时间:2021-07-16 21:33:08 PHP