Tag: callstack

GAS:.cfi_def_cfa_offset的解释

我想要解释一下GCC生成的汇编中的.cfi_def_cfa_offset指令所使用的值。 我隐约知道.cfi指令涉及调用框架和堆栈展开,但是我想要更详细地解释为什么,例如,在GCC输出的程序集中使用值16和8来编译下面的C程序在我的64位Ubuntu机器上。 C程序: #include <stdio.h> int main(int argc, char** argv) { printf("%d", 0); return 0; } 我在源文件test.c上调用了GCC,如下所示: gcc -S -O3 test.c 我知道-O3支持非标准优化,但为了简洁,我想限制生成的程序集的大小。 生成的程序集: .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%d" .text .p2align 4,,15 .globl main .type main, @function main: .LFB22: .cfi_startproc subq $8, %rsp .cfi_def_cfa_offset 16 xorl %edx, %edx movl $.LC0, %esi movl $1, %edi […]

怎样才能在C中抓取堆栈跟踪?

我知道有没有标准的C函数来做到这一点。 我想知道什么是在Windows和* nix这个技术? (Windows XP是我现在要做的最重要的操作系统。)

Android Studio – 我在哪里可以看到debuggingAndroid应用程序时的调用堆栈?

在断点处,如何查看调用堆栈以查找被调用方法/函数?

这个callstack是如何工作的?

我试图深入了解编程语言的低级操作是如何工作的,特别是他们如何与OS / CPU进行交互。 我可能在堆栈溢出的每个堆栈/堆相关的线程中都读过每个答案,它们都很精彩。 但是还有一件事我还没完全理解。 在伪代码中考虑这个function,这往往是有效的锈代码;-) fn foo() { let a = 1; let b = 2; let c = 3; let d = 4; // line X doSomething(a, b); doAnotherThing(c, d); } 这就是我认为堆栈看起来像X行: Stack a +————-+ | 1 | b +————-+ | 2 | c +————-+ | 3 | d +————-+ | 4 | […]

如何打印被调用的函数

在debuggingPython脚本时,我真的很想知道整个程序的整个调用堆栈。 一个理想的情况是,如果有一个Python的命令行标志,会导致Python打印所有函数名称,因为他们被称为(我检查了man Python2.7 ,但没有发现这种types的东西)。 由于这个脚本中的函数的数量,如果可能的话,我不希望在每个函数和/或类的开头添加一个print语句。 一个中间的解决scheme是使用PyDev的debugging器,放置一对断点,并在程序中检查调用堆栈的给定点,所以暂时使用这种方法。 如果存在这样一种方法,我仍然希望看到在程序的整个生命周期中调用的所有函数的完整列表。

最大调用堆栈大小超过错误

我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误, 它说 最大调用堆栈大小超出。 这个错误究竟意味着什么,它完全停止处理? 此外,任何修补程序的Safari浏览器(实际上在iPad Safari ,它说 JS:执行超时超时 我正在假设是相同的调用堆栈问题)