问题标签 [backtrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 汇编中的堆栈/基指针
我知道这个话题已经在这里和互联网上的其他地方被报道过令人作呕- 但希望这个问题是一个简单的问题,因为我试图让我的头脑围绕组装......
因此,如果我理解正确,ebp(基本指针)将指向堆栈的顶部,而 esp(堆栈指针)将指向底部——因为堆栈向下增长。esp 因此指向“当前位置”。因此,在函数调用中,一旦您将 ebp 保存在堆栈上,您就会插入一个新的堆栈帧 - 用于该函数。因此,在下图中,如果您从 N-3 开始,您将通过函数调用转到 N-2。但是当你在 N-2 时 - 你的 ebp == 25 和 esp == 24 (至少在最初,在任何数据放入堆栈之前)?
这是正确的还是我在这里切线?
谢谢!
(来源:wikimedia.org)
google-chrome - 如何强制谷歌浏览器显示异常回溯?
是否有可能(使用插件或一些配置选项)使 javascript 错误控制台显示错误回溯?
exception - 如何让 Ruby rake 显示未捕获异常的完整回溯
你可能知道 rake 吞下未捕获异常的完整回溯。如果我想要完整的回溯,我需要添加 --trace 选项。我觉得这很烦人,因为我的一些任务需要很长时间才能运行(最多 6 小时),当它崩溃时我没有任何调试信息。我需要使用 --trace 再次运行它。最重要的是,系统可能与错误发生时的状态不同,因此之后可能不会显示。我总是必须在任何任务上添加 --trace 。这显示了我不想在任务执行时看到的东西。
有没有办法改变这种默认行为?(我认为这根本没有用)
javascript - 未捕获的类型错误:无法读取未定义的属性“长度”
我有一个插件可以访问length
许多元素的属性。但是,javascript 控制台指向 jquery.min.js 的第 12 行。
如何回溯以找到插件中的违规行?
ruby - 如何在 Ruby 中跟踪死锁
我使用BrB为我 fork 的 Ruby 1.9 中的各种工作进程共享一个数据源Process#fork
:
工人分叉如下:
这非常完美,但运行大约 10 分钟后,我收到以下错误:
这个错误并没有告诉我很多关于死锁实际发生在哪里,它只指向join
EventMachine 线程上的。
如何追溯程序锁定的时间点?
iphone - 为 iPhone 模拟器构建时,XCode 控制台中不再有 gdb
通常我使用 gdb backtrace 来调试我的应用程序,但最近我在 iPhone 模拟器上测试时无法再这样做了。蓝色 gdb 单词停止显示在控制台上,当我键入“bt”或“backtrace”时没有任何反应。不过,我仍然可以在设备上正确构建和调试。
我的 XCode 版本是 3.2.3。有什么方法可以手动激活 gdb(更重要的是回溯)?
c - 将跟踪和回溯包含到 C 程序中的一种简单、统一且可移植的方法
将代码移植到新平台时, GNU libc 的回溯和在线仿真器/调试器并不总是可用,尤其是当目标是诸如Z80之类的微型C编译器时。(通常,程序错误会“挂在”某处,或者使小工具崩溃。)
手动插入 printf的经典“狼围栏”方法是否有替代方法?程序员在开发包括跟踪和回溯到 C 程序中的程序时可以做的简单和可移植的事情(不使用 C 扩展)?
顺便说一句:这里有几个关于stackoverflow的其他相关问题,但这些都使用GNU GLIBC 的回溯,并且回溯通常是特定于编译器/实现的:
php - 在每个 PHP 回溯级别获取范围内的变量?
有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近地组合debug_backtrace(true)
获取对象,get_object_vars
在每个对象上获取 $this 变量,args
每个回溯帧中的键,并get_defined_vars
获取全局变量,但是在函数中设置的任何临时变量我找不到方法检索。
这是一个示例情况:
我可以通过回溯中的键、通过的对象变量和通过的全局变量来获取$foo
和通过。我也想得到and的值。$bar
args
$bar
get_object_vars
get_defined_vars
$temp2
$temp
ruby - 我可以在回溯中制作 ruby 显示方法参数值吗?
使用 MRI 1.9
当引发导致打印回溯的异常时,如果回溯显示方法参数的接收者和值以及方法名称,通常会非常容易调试。有没有办法做到这一点?
考虑以下情况,例如将 nil 深入到库代码中,这不是预期的,或者两个字符串具有不兼容的编码并且某些例程试图将它们连接起来
c++ - 在Windows下获取指向调用堆栈底部的指针并按地址解析符号(如dladdr)?
例如,我想在 Windows 下实现一个类似的回溯实用程序,以便将此信息添加到异常中。
我需要捕获返回地址,然后将其转换为符号名称。
我知道 StackWalk64 和StackWalker 项目,但不幸的是它有几个重要的缺点:
- 众所周知它非常慢(StackWalk64),我不想浪费太多时间来收集跟踪,基本上可以像在链表上行走一样快。
- 已知函数 StackWalk64 不是线程安全的。
我只想支持 x86 和可能的 x86_64 架构
我的基本想法如下:
- 使用 esp/ebp 寄存器在堆栈上运行,类似于 GCC 的
__builtin_return_address(x)
/__builtin_frame_address(x)
doe 直到我到达堆栈底部(这就是 glibc 所做的)。 - 将地址转换为符号
- 拆解它们。
问题/疑问:
- 我怎么知道我到达了堆栈的终点?例如 glibc 实现有
__libc_stack_end
,所以很容易找到停止的地方。Windows下有类似的东西吗?如何获取栈底地址? - dladdr 功能的类似物是什么。现在我知道,与保留大部分符号名称的 ELF 平台不同,PE 格式没有。所以它应该以某种方式读取调试信息。有任何想法吗?