问题标签 [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.

0 投票
2 回答
1630 浏览

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

当我的规格遇到错误时,我会收到如下消息:

我正在运行 Ruby 1.0.2、rails (3.0.3) 和 rspec (2.3.0)。M .rspec 配置文件只指定了两个选项:

--drb --color

如何关闭扩展跟踪?

0 投票
2 回答
8844 浏览

java - java:打印当前回溯

有没有办法在 Java 中添加一个命令来添加当前的回溯?

我正在编写一个 red5 应用程序,并且 appDisconnect 函数被调用了两次。每当用户更换房间时。我想在 appDisconnect 函数的开头添加一个显示当前回溯的函数,然后我可以看到调用它的内容。

谢谢

0 投票
2 回答
1965 浏览

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

注意:我使用的是在使用 libxml-ruby gem 时遇到的段错误来说明问题,但我已经用所述 gem 解决了我的问题。这个问题的真正含义是从 ​​gdb 中查看带有核心文件的 Ruby 回溯(即解释器在 Ruby 代码无法处理异常时打印的相同内容),解释器本身遇到分段错误。

在生成 XML 文档时,我遇到了一个奇怪的段错误,其中包括:

更新 1:这个 segfaults 在 vanilla Ruby (MRI) 下也是如此。

我打开了 corefiles 并查看了 gdb 中的回溯(见问题的结尾)。我可以看到解释器在哪里崩溃,谷歌搜索会导致很多有希望的结果。除了解释器回溯之外,我希望看到的是 Ruby 代码本身的回溯(即解释器的角度来看的回溯)。

我希望在 gdb 中加载核心将允许我调用一些解释器函数来打印出解释代码的堆栈。

有任何想法吗?

对于好奇的人,这是核心和回溯:

0 投票
2 回答
9177 浏览

c - gdb 奇怪的回溯

我的程序是用dietlibc 静态编译的。它在 ubuntu x64 上编译(使用 -m32 标志为 x86 编译)并在 centos x86 上运行。

编译后的大小只有100KB左右。我用 -ggdb3 编译它,没有优化标志。

我的程序使用 signal.h 处理 SIGSEGV 信号,然后调用 abort()。

该程序运行几天没有问题,但有时会出现段错误。这是当我得到我不理解的奇怪回溯时:

0 投票
6 回答
1052 浏览

c++ - C++ 程序在 gcc 中的 SIGSEGV 期间不处理任何函数调用或 printf

我在将堆栈跟踪输出到 stderr 或转储到日志文件时遇到问题。我正在使用 gcc 编译器(4.4.3)在 Kubuntu10.04 中运行代码。问题是在正常运行模式下(没有gdb),程序除了'Segmentation Fault' 不输出任何东西。我希望在下面的打印语句中输出回溯输出。当我使用我的应用程序运行 gdb 时,它会出现 printf/fprintf/(function call) 语句,然后由于以下语句而崩溃:

奇怪的是,如果我在同一个文件中调用一个崩溃的函数,它就可以正常工作,并且可以正常输出。但是如果程序在这个文件之外的函数中崩溃,它不会打印任何输出。因此,不会处理任何 printf 或文件转储语句或函数调用。我正在使用以下示例代码:

提前感谢您的帮助。

0 投票
3 回答
29160 浏览

c - Win32 - C 代码的回溯

我目前正在寻找一种在 Windows 下从 C 代码(非 C++)获取回溯信息的方法。

我正在构建一个具有引用计数内存管理的跨平台 C 库。它还有一个集成的内存调试器,可以提供有关内存错误的信息(XEOS C Foundation Library)。

发生故障时,调试器会启动,提供有关故障的信息以及所涉及的内存记录。

在此处输入图像描述

在 Linux 或 Mac OS X 上,我可以查找execinfo.h以使用该backtrace功能,因此我可以显示有关内存故障的其他信息。

我在 Windows 上寻找同样的东西。

我已经看到如何在 C 中获取堆栈跟踪?关于堆栈溢出。我不想使用第三方库,所以CaptureStackBackTraceorStackWalk函数看起来不错。

唯一的问题是我不知道如何使用它们,即使使用 Microsoft 文档也是如此。

我不习惯 Windows 编程,因为我通常在兼容 POSIX 的系统上工作。

这些功能有哪些解释,也许还有一些例子?

编辑

我现在正在考虑使用CaptureStackBackTracefrom 的功能DbgHelp.lib,因为它的开销似乎少了一点……

这是我到目前为止所尝试的:

我只是越来越垃圾。我想我应该使用除SymFromAddr.

0 投票
6 回答
15498 浏览

c - Windows 上的 StackWalk64 - 获取符号名称

好的,一天内关于 SO 的第二个问题。看起来Windows编程让我很开心......:S

我目前正在尝试在 Win32 可执行文件上获取函数调用堆栈。

今天早上,我也问了一个关于这个的问题:

Win32 - C 代码的回溯

现在,我很确定该StackWalk64功能是实现这一目标的关键。我已经阅读了一些关于如何使用它的文章,以及 MS 文档。

它实际上在我的测试程序上显示帧,所以它有点工作......

问题是我无法从堆栈信息中检索符号名称。

我正在为此使用该SymGetSymFromAddr64功能,带有UnDecorateSymbolName. 但我只得到垃圾字符。

这是我的代码。希望它不要乱七八糟,因为我不习惯 Windows 编程:

实际输出为:

顺便说一句,堆栈地址总是0似乎很奇怪......任何帮助表示赞赏:)

谢谢大家!

编辑

我正在寻找一个普通的 C 解决方案,没有第三方库......

0 投票
1 回答
3132 浏览

macos - 内核恐慌时的回溯

是否可以在不附加 gdb 的情况下获得 kext 的回溯,如在

http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptDebugger/debug_tutorial.html

如果我有恐慌日志?

不知何故像这样:

  1. 从 panic log 中获取 kext 导致 panic 的地址
  2. 生成 dSYM 文件kextutil
  3. 将 dSYM 文件中的方法名称粘贴到紧急日志中以获取回溯?
0 投票
4 回答
37546 浏览

c - 如何在内核模块代码中包含 C 回溯?

所以我试图找出哪些内核进程正在调用块驱动程序中的某些函数。我认为在 C 库中包含 backtrace() 会很容易。但是我无法加载回溯。

我复制了这个示例函数来显示回溯:

http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/063/6391/6391l1.html

所有的编译尝试在某个地方或另一个地方都有错误,即找不到文件或未定义函数。

这是最接近的。

在 Makefile 我放了编译器指令:

如果我忽略了第二个,-I/usr/include,那么编译器会报告它找不到所需的头文件 execinfo.h。

接下来,在我想要执行回溯的代码中,我从示例中复制了函数:

我稍后在块驱动程序函数中调用了这个函数,错误的第一个迹象发生在该函数中。简单地:

所以当我编译它时,出现以下错误:

注意:block26.c 是我希望从中获取回溯的文件。

当 backtrace 和 backtrace_symbols 被编译到 .ko 模块中时,是否有明显的原因保持未定义?

我猜是因为我使用了编译器 include execinfo.h,它驻留在计算机上并且没有加载到模块中。

至少可以说,这是我没有受过教育的猜测。

任何人都可以提供帮助以在模块中加载回溯功能吗?

感谢您查看此查询。

我正在开发Debian。当我取出函数等时,模块编译得很好,几乎可以完美运行。

来自 ndasusers

0 投票
0 回答
274 浏览

android - 在 Eclipse 中从 dalvikvm (Android) 解析调试信息

我正在 Eclipse 中制作一个使用 SQLite 的小型 Android 应用程序。它工作得很好。当我出于好奇通过 Logcat 浏览一些消息时,我发现了这些消息的重复:

谷歌搜索我发现错误是由于我忘记了cursor.close(). 但是,为了将来参考,我怎样才能让 DDMS/Logcat 告诉我这个错误是关于哪个游标的?此时我知道它是哪一个(我手动搜索了所有源代码),但是随着我的代码变得越来越大,让 DDMS 为我指明可以提取数据的方向会很好。至于现在,调试信息窗口中转储的所有内容对我来说都是不可理解的。