backtrace相关内容

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 其他开发

如何展开堆栈以获取指定堆栈指针 (SP) 的回溯?

我是为 Android 编写的(仅限 ARM),但我相信一般 Linux 的原理也是一样的. 我正在尝试从信号处理程序中捕获堆栈跟踪,以便在我的应用程序崩溃时记录它.这就是我使用 想到的. 初始化: struct sigaction signalhandlerDescriptor;memset(&signalhandlerDescriptor, 0, sizeof( ..
发布时间:2021-11-17 21:42:42 其他开发

获取调用者的返回地址

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

在 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 其他开发

是否可以在不惊慌的情况下在 Rust 中打印回溯?

是否可以在不惊慌的情况下打印回溯(假设启用了 RUST_BACKTRACE)?似乎唯一的方法是通过 panic! 调用.如果不是,有什么原因吗? 解决方案 Rust 使用 backtrace crate 来在发生恐慌时打印回溯(已在 PR #60852 中合并). 一个简单的例子可以在 crate 文档中找到 使用 backtrace::Backtrace;fn 主(){让 bt ..
发布时间:2021-07-13 21:10:47 其他开发

Rails 回溯消音器不起作用,而过滤器起作用

新的 Rails 4.2 设置.我想抑制长错误回溯.在下面的回溯日志中,第一行对我来说就足够了,接下来的 4 行可以删除 ActionController::RoutingError(没有路由匹配 [GET] "/user"):actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'web ..
发布时间:2021-07-12 19:37:10 其他开发

永久设置 rails 控制台堆栈回溯限制

rails 控制台 默认使用 context.back_trace_limit=16 启动,只需输入 context.back_trace_limit=n 即可更改为您想要的任何内容代码>.问题是每次启动 rails c 时都必须输入它.我在哪里永久更改 context.back_trace_limit ?阅读更多有关 rails 控制台配置的文章表示赞赏. 解决方案 您必须使用以下内容创 ..
发布时间:2021-07-12 19:13:59 其他开发

如何缩短 RSpec 2 中测试失败的回溯?

当我的规格出现错误时,我收到如下消息: 供应商应拒绝重复名称失败/错误:user_with_duplicate_email.should_not be_valid预期有效?返回假,得到真#/home/kevin/.rvm/gems/ruby-1.9.2-p136@rails3tutorial/gems/rspec-expectations-2.3.0/lib/rspec/expectations ..
发布时间:2021-07-10 20:27:04 其他开发

RUST_BACKTRACE应该告诉我什么?

我的程序很恐慌,所以我按照它的建议运行了 RUST_BACKTRACE = 1 ,我明白了(只是一小段). 1:0x800c05b5-std :: sys :: imp :: backtrace :: tracing :: imp :: write :: hf33ae72d0baa11ed在/buildslave/rust-buildbot/slave/stable-dist-rustc-li ..
发布时间:2021-04-29 20:28:16 其他开发

make_shared()的可调试替换

使用gcc 4.6.2,如果构造函数引发异常,make_shared()会给出无用的回溯(显然是由于重新抛出).我正在使用make_shared()节省一些键入内容,但这是show stopper.我创建了一个替代 make_shrd(),它可以进行正常的回溯.我正在使用gdb 7.3.1. 我担心: make_shared()下不好的回溯是我自己的错 我的替代品make_shrd( ..
发布时间:2021-04-20 18:45:55 其他开发

来自addr2line的行号错误

我尝试在C ++程序的回溯中找到调用的确切行.现在,我正在使用这些行(来自backtrace的手册页)来获取跟踪: void * bt_buffer [1000];char ** bt_strings;int bt_nptrs = backtrace(bt_buffer,1000);bt_strings = backtrace_symbols(bt_buffer,bt_nptrs); 在b ..
发布时间:2021-04-19 19:10:10 其他开发

在ARM平台上没有SIGABRT信号的回溯吗?

我在信号处理程序中使用' backtrce()'和' backtrace_symbols_fd()'函数来生成用于调试的回溯(GDB不可用). 它们在x86桌面版(Ubuntu)上可以正常工作,但是在目标设备(基于ARM)上,Abort信号的回溯(由于双重释放错误)仅显示三个帧:信号处理程序还有两个来自libc,这对调试我们的代码没有用!SEGV上的回溯(例如使用错误的指针)确实会产生良好的 ..
发布时间:2021-04-09 19:24:47 其他开发

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

就程序而言,堆栈只是一堆内存. backtrace函数如何确定哪些堆栈字节是指令指针的返回地址,而不是那些仅是函数参数的地址,等等? 解决方案 就程序而言,堆栈只是一堆内存. 那是正确的.如果您对程序的结构一无所知,则将无法解开其堆栈. 最容易用于展开的结构是其中单个“帧指针"被展开的结构.保留寄存器以始终指向当前帧,并且该帧在已知偏移处包含上一个帧指针. 这是在i* ..
发布时间:2020-11-16 00:06:04 其他开发

可以使用libSegFault.so来获取SIGABRT的回溯吗?

魔咒 LD_PRELOAD=/lib/libSegFault.so someapp 使用libSegFault.so运行someapp,从而提供关于SIGSEGV的回溯信息,如很多 除了使用类似signal(7)的方法导致SIGABRT调用SIGSEGV处理程序外,还有什么方法可以使libSegFault为assert(3)失败提供回溯信息? 解决方案 env SEGFAULT_ ..
发布时间:2020-11-15 23:58:08 其他开发

是否有一个gcc宏用于确定未消除帧指针?

使用-fomit-frame-pointer(对于各种-O设置自动)时,执行回溯是有问题的.我想知道是否有一种方法可以在编译时确定使用此开关编译代码吗?在这种情况下,我可以在不明智的情况下输入#ifndef来防止回溯. 此-fomit-frame-pointer开关打开时,是否设置了宏? 谢谢 SetJmp 解决方案 我刚刚尝试过: gcc -E -fomit-fr ..
发布时间:2020-11-10 20:19:01 其他开发

如何将PHP回溯记录保存到错误日志?

我现在正在使用此: error_log(serialize(debug_backtrace())); 但是我每次都必须反序列化它。有没有更好的方法来存储回溯? 解决方案 这应该会生成可读的字符串: error_log(print_r(debug_backtrace(),true)); 此外, debug_print_backtrace( ..
发布时间:2020-10-30 19:41:59 其他开发