backtrace相关内容
..
好的,一天后关于 SO 的第二个问题.看起来 Windows 编程让我很开心……:S 我目前正在尝试获取 Win32 可执行文件上的函数调用堆栈. 今天早上,我还问了一个关于这个的问题: Win32 - 来自 C 代码的回溯 现在,我很确定 StackWalk64 函数是实现此目的的关键.我已经阅读了一些关于如何使用它的文章,以及 MS 文档. 它实际上在我的测试程序
..
两段示例代码;首先将一些 C++ 代码调用到程序集中: /* test1.cc */#include extern "C" 无效 blah();外部“C"无效的东西(){printf("这是一个测试\n");}int main(int argc, char *argv[]) {废话();返回0;} ...然后是程序集: .file "test2.s".文本.globl 等等
..
GDB 中是否有与 WinDbg 的 !process 0 7 等效的命令? 我想提取转储文件中的所有线程以及它们在 GDB 中的回溯.info threads 不输出堆栈跟踪.那么,有没有这样的命令呢? 解决方案 一般情况下使用backtrace来获取当前线程的堆栈,但是如果有必要获取所有线程的堆栈跟踪,使用下面的命令. 线程应用所有bt
..
注意:我正在使用我在使用 libxml-ruby gem 时遇到的段错误来说明问题,但我已经用所述 gem 解决了我的问题.这个问题的真正含义是从 gdb 中查看 Ruby 回溯(即解释器在 Ruby 代码无法处理异常时打印的相同内容),其中包含解释器本身遇到分段错误的核心文件. 我在生成 XML 文档时遇到了一个奇怪的段错误: /railsroot/vendor/isolated/r
..
魔法咒语 LD_PRELOAD=/lib/libSegFault.so someapp 使用 libSegFault.so 运行 someapp,提供关于 SIGSEGV 的回溯信息,如 很多 不同 地方. 除了使用类似 signal(7) 的方法来导致 SIGABRT 调用 SIGSEGV 处理程序之外,还有什么方法可以获取 libSegFault为 assert(3) 失败提供回溯信
..
我正在为 Android(仅限 ARM)编写此代码,但我相信通用 Linux 的原理也是相同的. 我正在尝试从信号处理程序中捕获堆栈跟踪,以便在我的应用程序崩溃时记录它.这就是我使用 得出的结论. 初始化: struct sigaction signalhandlerDescriptor;memset(&signalhandlerDescriptor, 0, siz
..
Call Trace 包含以下条目: [] FunctionName+0xAB/0xCD [module_name][] ?另一个函数名+0x12/0x40 [module_name][] ClearFunctionName+0x88/0x88 [module_name] '?'是什么意思在AnotherFunctionName 之前标记? 解决
..
尝试使用默认的仅当前行错误消息来调试 PHP 是很可怕的.发生错误时,如何让 PHP 生成回溯(堆栈跟踪)? 解决方案 Xdebug 打印关于错误的回溯表,并且您不必编写任何 PHP 代码来实现它. 缺点是您必须将其安装为 PHP 扩展.
..
Linux 特定的backtrace() 和backtrace_symbols() 允许您生成程序的调用跟踪.但是,它只打印函数地址,而不是我的程序的名称.我怎样才能让他们也打印函数名称?我试过用 -g 和 -ggdb 编译程序.下面的测试用例只是打印这个: 回溯-------------./a.out() [0x8048616]./a.out() [0x8048623]/lib/libc.so
..
尝试使用默认的仅当前行错误消息来调试 PHP 是很可怕的.发生错误时,如何让 PHP 生成回溯(堆栈跟踪)? 解决方案 Xdebug 打印关于错误的回溯表,并且您不必编写任何 PHP 代码来实现它. 缺点是您必须将其安装为 PHP 扩展.
..
我知道函数 debug_backtrace,但我正在寻找一些现成的函数实现,例如 GetCallingMethodName()?如果它也给出方法的类就完美了(如果它确实是一个方法). 解决方案 debug_backtrace() 函数是了解这一点的唯一方法,如果您很懒惰,这也是您应该编写代码的另一个原因GetCallingMethodName() 自己.与懒惰作斗争!:D
..
就程序而言,堆栈只是一堆内存.回溯函数如何确定哪些堆栈字节是指令指针返回地址,而不是哪些只是函数参数等? 解决方案 对程序而言,栈就是一堆内存. 没错.如果您对程序的结构一无所知,您将无法展开其堆栈. 用于展开的最简单的结构是单个“帧指针"保留寄存器以始终指向当前帧,并且该帧包含位于已知偏移量处的上一个帧指针. 这是在i*86上使用了很长时间的机制,并且仍然在许多RI
..
我在信号处理程序中使用“backtrce()"和“backtrace_symbols_fd()"函数来生成用于调试的回溯(GDB 不可用). 它们在 x86 桌面 (Ubuntu) 上运行良好,但 在目标设备(基于 ARM)上,Abort 信号的回溯(由于双重释放错误)仅显示三帧:信号处理程序和两个来自 libc 中的,这对调试我们的代码没有用!SEGV 上的回溯(例如使用错误的指针)确实会
..
我们在 ARM 9 上运行 uclibc linux.问题是 uclibc 不支持回溯.当发生核心转储时,我无法获取调用堆栈. 有没有人有好的解决方案? 例如,现有的 uclibc 回溯移植,或者在发生核心转储时获取调用堆栈的任何好方法 (uclibc+ARM+Linux)? 解决方案 更新: 似乎是一个补丁 的创建是为了在 x86 和 ARM (XScale) 的 uc
..
我是为 Android 编写的(仅限 ARM),但我相信一般 Linux 的原理也是一样的. 我正在尝试从信号处理程序中捕获堆栈跟踪,以便在我的应用程序崩溃时记录它.这就是我使用 想到的. 初始化: struct sigaction signalhandlerDescriptor;memset(&signalhandlerDescriptor, 0, sizeof(
..
我想弄清楚如何在 MSVC 中获取调用者的返回地址.我可以使用 _ReturnAddress() 来获取我的函数的返回地址,但我似乎无法找到获取调用者的方法. 我尝试过使用 CaptureStackBackTrace,但由于某种原因,它在多次调用后崩溃.我也更喜欢通过内联汇编的解决方案. void my_function(){cout
..
抱歉,如果这是一个新手问题,但我找不到关于此的任何文档或其他 stackoverflow 问题.我想查看在求解表达式或方程时调用的所有最大值函数的整个堆栈跟踪.我尝试了跟踪、回溯和调试模式.查看了不同的显示和打印功能,但都不起作用. 示例 1: (%i1) is(equal( (a+b)^2, a^2+b^2+2*a*b ));(%o1) 真 示例 2: (%i2) trace(fac
..
我试图理解 GCC (4.4.3) 为在 Ubuntu Linux 下运行的 x86_64 机器生成的可执行代码.特别是,我不明白代码如何跟踪堆栈帧.在过去,在 32 位代码中,我习惯于在几乎每个函数中看到这个“序言": push %ebpmovl %esp, %ebp 然后,在函数结束时,会出现一个“尾声",要么 sub $xx, %esp # 其中 xx 是基于 GCC 的记帐的数字.弹
..
有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近 debug_backtrace(true) 的组合来获取对象,在每个对象上使用 get_object_vars 来获取 $this vars,args> 在每个回溯帧中键入键,并使用 get_defined_vars 获取全局变量,但是在函数中设置的任何临时变量我都找不到检索方法. 这是一个示例情况: function meth
..