问题标签 [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 投票
1 回答
1404 浏览

linux - 在linux中,如何在gdb中找到哪个线程处于挂起状态?

我有一个多线程程序,它在 linux 上运行了大约 200 个线程,我知道它有点多。好吧,这是一个遗留程序 :) 这个程序在 2.6.29 上运行,带有 debian OS 我怎样才能轻松找出哪个线程的堆栈帧包含类似 functionA?我正在使用“线程应用所有 bt”来显示所有线程的回溯。但是,我需要检查每个堆栈帧以找到包含 functionA 的正确线程。

谢谢你!问孩子

0 投票
3 回答
504 浏览

ruby-on-rails - 应该破坏我的回溯吗?

我有一个或多或少这样的测试:

我特意加了一个

在路上的某个地方,我收到了这个错误:

当我应该得到一些东西时:

任何想法是什么在清理/破坏我的回溯?我的怀疑是应该是因为异常发生在设置内部或应该是它发生的时候。

这是一个 Rails 3 项目,以防万一。

0 投票
3 回答
3551 浏览

c - SIGSEGV 的回溯

我正在调试一个用 ansi C 编写的应用程序,一个多线程程序。
有时,在主线程中会导致 SIGSEGV 故障。

这些信息来自核心文件,我不是很喜欢在 Linux 环境中调试,有什么办法可以找出问题所在吗?

编辑:所有源文件都使用如下标志编译

0 投票
3 回答
1468 浏览

c++ - sh4-linux 上的回溯返回一个函数

我正在尝试从程序中打印调用堆栈。不幸的是,调用 glibc backtrace() 总是只返回一条记录——当前函数的地址。我正在研究 sh4-linux,这可能会导致问题。我在 x86 架构上打印它没有问题。

示例代码:

由以下人员编译:

编辑:实际上这段代码工作正常。可能某些编译器标志会在实际项目中导致这种行为。

编译器标志是:-g -O0 -pipe -fpermissive -frtti -fno-exceptions -ffunction-sections

链接器标志:-lpthread -g -rdynamic -Wl,-gc-sections -Wl,--start-group {Files here} -Wl,--end-group --verbose -Xlinker -lm

EDIT2:我发现哪个标志是原因:-fno-exceptions。谁能告诉我为什么?如果它可以在不跳过此标志的情况下进行修复?

EDIT3:好吧,没关系。看来我实际上可以省略这个标志。

0 投票
3 回答
8625 浏览

c++ - 从 catch 块中获取回溯

我正在使用回溯从引发异常的位置获取信息。在我的异常的构造函数中,我将回溯存储在 std::string 中,在这种类型的异常的 catch 块中,我正在打印这个回溯。

但我想知道,是否有可能以某种方式在 catch 块中为其他异常类型获得相同的回溯?

0 投票
1 回答
859 浏览

shell - GDB:回溯命令的格式:在另一个shell/ssh中运行时,框架行分为几行

当我在本地(Ubuntu 10.10)使用 BACKTRACE 命令运行 GDB 时,我得到以下输出:

当我在 Ubuntu 9.04 机器上通过相同的 coredump (SSH) 远程运行它时,我得到:

将不胜感激任何建议如何使它像第一个样本一样运行。它与远程 shell 设置或 GDB 本身有关吗?

谢谢

0 投票
1 回答
244 浏览

c - 使用 dlopen() 对象时确定调用对象

我正在编写一个 (C) 程序,它通过 dlopen() 使用插件系统。我遇到的绊脚石是主程序导出了一些真正需要知道调用它们的插件的函数(主要是记录保存,因此插件可以正确卸载,因为它们向主程序添加函数指针之类的东西程序)。

我似乎找不到一种干净的方法来做到这一点。到目前为止我提出的选项:

  1. 要求插件提供其名称,或者我在加载时提供的一些数据作为函数的参数。
    • 我不喜欢这个选项,因为不是所有的函数都关心它们是从谁调用的,所以它使它不一致和混乱。另外,我想让插件尽可能难以谎报它是谁
  2. 使用 backtrace() 确定前一个函数的对象名称。
    • 这看起来相当丑陋且不可移植。
  3. 要求插件放置一个包含其名称的文件级结构(或其他变量)(我们称之为“plugin_info”进行讨论)。然后在加载插件时使用 dlsym() 来查找变量并按其名称对其进行索引(如在哈希中)。然后放入插件用来调用函数的#define 宏,并将宏添加&plugin_info为参数。
    • 这就是我现在正在使用的,但它看起来很hackish。对于一个你必须有宏传递'&plugin_info',如果你只是传递'plugin_info'那么它会从主程序中提取'plugin_info',而不是插件。通过地址引用它似乎可以使它用正确的编译,并且它不会被重新定位。这让我不喜欢这个选项,因为这似乎是它未定义的行为,但它确实有效。此外,当插件开发人员遇到函数调用问题(传递错误的参数类型或诸如此类的东西)时,宏也会让人有点困惑。

如果有任何其他想法或技术,我很想知道。

0 投票
3 回答
152 浏览

php - 告诉函数是如何被调用的

我已经查看了 debug_backtrace 但到目前为止它并没有做我需要它做的事情。

我需要知道我正在调用的函数是“调用”还是“回显”。像这样:

但是,如果在“回声”上“调用”该函数,该函数会做不同的事情。

我该怎么做?

0 投票
2 回答
1014 浏览

php - 跟踪调试日志记录的文件和行的问题 (PHP)

因此,我正在尝试制作一种允许即时记录调试消息的方法,并且我想包括出现消息的文件名和行号。我的第一个倾向是将 debug_backtrace() 作为记录方法的参数之一,它返回一个包含当前文件名和行号的数组。

问题是,这只给出了第一个文件(index.php)的文件和行。index.php 只是一个五行文件,它从包含文件中的类调用方法但是,因此行和文件信息总是说(index.php,第 5 行)无论如何都是无用的。

无论您在代码中的哪个位置,有没有办法获取当前行和文件?

添加

这是文件和行信息:

[2011-01-23 06:26:10] 信息:“请求不存在的控制器(测试)。”,文件:“/home/spotless/public_html/mymvc/index.php”,行:5,请求: “/测试”

这是 index.php 的全部内容:

这是在 init.php 文件(第 37 行)中使用 debug_backtrace() 的日志记录调用:

第二次更新

debug_backtrace 的 var_dump

数组(1) { [0]=> 数组(6) { ["file"]=> string(42) "/home/spotless/public_html/mymvc/index.php" ["line"]=> int(5 ) ["function"]=> string(4) "init" ["class"]=> string(8) "lev_init" ["type"]=> string(2) "::" ["args"]= > 数组(0) { } } }

0 投票
0 回答
1650 浏览

debugging - 使用 gdb 获取特定线程的堆栈跟踪

从 C++ 应用程序内部,我想调用 gdb 仅打印当前线程的堆栈跟踪。

这可用于从应用程序内部获取断言之类的宏的堆栈跟踪。Gdb 提供了详细的堆栈跟踪,“手动”实现非常复杂:

怎么做?