问题标签 [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.
c++ - 共享库中的回溯功能
SEGSEGV
进入共享库后,我正在尝试获取堆栈跟踪并将其保存到文件中。共享库是闭源产品的插件。所有这些都适用于生产,我无法直接访问它。
我的代码捕获SIGSEGV
信号,打印堆栈跟踪并退出。我有这样的事情:
/opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc2019f11] /opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc2019f11] /opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc2019fee] /opt/ecelerity/ libexec/site/ec_attachextensions.so [0x2aecc201a587]
/opt/ecelerity/sbin/ecelerity [0x501235]
/opt/ecelerity/sbin/ecelerity(sieve_seng_execute+0x82) [0x506d32] /opt/ecelerity/libexec/validate/sieve.so [0x2aecc2862c9e] /opt/ecelerity/sbin/ecelerity(validate_data+0xa5) [0x4a90d5] /opt/ ecelerity/sbin/ecelerity(esmtp_message_factory+0x154e) [0x46eace] /opt/ecelerity/sbin/ecelerity(schedule_event_and_dispatch+0x6a) [0x49c59a]
问题是我不能在其中包含共享库的函数名称和偏移量。据我了解,在找到/proc/$PID/maps
.
之后,我正在执行类似的操作:
0x2aecc2019f11
上面堆栈跟踪的地址在哪里。我想知道有什么方法可以在不接触地图文件的情况下在堆栈跟踪中获取函数名称?换句话说,我该如何编程?在这里会dladdr
有所帮助(在我的情况下dladdr
,无法从函数提供的地址获取函数名称backtrace
)?
linux - d2:没有得到任何回溯信息
我正在使用 gtkd 包装器生成器,并遇到 std.conv 异常,我根本无法获得任何符号调试信息。我用调试符号编译:
但回溯只是内存地址列表:
这是在 32 位 linux 下
c++ - 在 snprintf 中调用 strlen 期间调用 backtrace_symbols_fd() 有时会挂起
我正在尝试使用信号处理程序捕获故障,然后打印堆栈跟踪信息以添加到日志文件(或控制台)中以获取崩溃报告并在非开发机器上调试我的应用程序。我的问题是有时我没有得到完整的堆栈帧回溯。在许多情况下,它似乎挂起并且没有完成或退出。只有有时它会成功退出。
这是我的代码:
您会在我的示例代码中注意到,负责用调用者地址覆盖 sigaction 的部分已被注释掉。这是因为我不确定如何让它为 Mac 编译。
这是一个示例控制台输出: 控制台输出 http://www.minesclubtennis.com/images/stackoverflow/fatalconsoleoutputhang.png
您会注意到它只打印了前 3 帧,然后挂起而不退出,即使找到并应该打印 9 帧。
所以我从 Activity Monitor 应用程序中做了一个“示例过程”,发现执行 backtrace_symbols_fd 函数的线程卡在了 strlen 上。截图: 示例过程输出 http://www.minesclubtennis.com/images/stackoverflow/sampleprocessoutputhang.png
为什么挂了?这是我自己代码中的错误还是 Apple回溯中的错误?有人告诉我,信号处理程序可以做的事情有限,但我在sigaction 手册页上看不到任何表明我做错了什么的东西。
c++ - 带有 libc 的 SIGSEGV 回溯正在重复条目
在转到可用的 execinfo 回溯之前,我使用的是 libunwind。在实现了一个新的回溯之后,我很享受它,直到我从项目中删除了 libunwind 并进行了完全重建。
现在我的回溯功能拒绝从 SIGSEGV 产生正常结果(我知道从那里进行回溯是不安全的),但为什么它之前工作正常?
我现在将发布结果不正确的输出。第一个回溯是一个异常,第二个是故意的 SIGSEGV - 预期结果将是对 __libc_start_main 的跟踪
我记得我读过一些关于信号堆叠的问题?
c - 如何在 Cygwin 中获得有用的回溯?
虽然我已经用 编译了我的 C 程序-g -O0
,但我从 gdb 获得的回溯是无用的:
有什么方法可以在 Cygwin 中获得有用的回溯?
我的 gdb 版本是7.3.50.20111026-cvs (cygwin-special)
, gcc 是4.5.3
.
crash - 谁能解释一下erlang的错误回溯?
- 有没有一种在 shell 中打印漂亮错误跟踪的好方法?
- 如何理解错误跟踪?
谢谢!
c++ - C ++不需要的中止原因?
我的 C++ 代码中有一个非常奇怪的错误。
我必须告诉你这个故事才能理解整个故事。我正在通过 boost_thread 库使用线程。main 方法进行一些初始化,启动 3-4 个线程,然后永远等待:
所有线程的主要功能都有一些 catch 和 catch all 处理程序的尝试:
线程执行各种任务,例如
- 使用 execv 函数执行脚本,
- 使用 sqlite 库写入数据库,
- 通过 openssl 库与世界交流。
有时,不是通常,但经常会烦人程序被终止。
一切都在应该的时候被正确地释放和删除,所以这不是问题。我让它生成一个核心转储,以便有机会调试问题。
有趣的部分现在来了:GDB 的回溯看起来像这样:
无休止的中止呼叫,我不知道是什么原因造成的。线程看起来像这样:
这也很有趣,因为线程 1 是具有无限睡眠循环的主要功能。
我的问题:我 怎样才能找到流产的原因(因为我不能忽略它,如果我没记错的话)?
在论坛、IRC 频道和谷歌上搜索它 - 但仍然没有。几周前我被困住了,所以非常感谢任何信息!
非常感谢!
c - 从 GDB 获取堆栈跟踪
我一定对堆栈或函数的调用方式有误解,我从 GDB 获得的回溯结果对我来说毫无意义。我试图找出程序中调用的位置,以便我可以添加我的组件。
该工具在视频上绘制边界框,我制作的是插值器。我认为只有在绘制框时打开 GDB 并在其中设置断点并运行回溯才有意义。这是 mu 输出(从 运行程序后ffmpeg.c main()
)
draw_glyphs
忽略所有非 ascii 字符,这两个函数是如何draw_text
被调用的?为什么堆栈上没有其他内容?当我选择 Frame #1 并尝试 goup
时,它告诉我:
编辑:
我看了更多,当我问的时候,我更加困惑。该函数draw_glyphs
甚至没有在我正在运行的 main 内部调用。我已经浏览了所有用于编译的文件,而且……它没有在任何地方调用!
这是否意味着它是一个动态创建的函数指针或什么?如果是这样,那会使堆栈像我的那样不可访问吗?
linux - gdb:当 fglrx_dri.so 段错误时如何获得完整的回溯?
在运行我自己的基于 Qt 的 OpenGL 应用程序时,我在 fglrx dri 库中遇到分段错误。我从 gdb 获得的回溯(为 Qt 和我自己的应用程序安装了 dbg 符号):
我无法从我的代码中看到我调用导致分段错误的 fglrx 函数的位置。如何扩展此回溯以将其完全从 main() 函数向下查看到 fglrx dri 库?
编辑:确认我自己的应用程序是用调试符号构建的:
c - 僵尸,gdb 无法附加,如何检查最后一次调用或回溯
我的应用程序在 Linux 机器上进入僵尸状态,它无法被杀死,gdb 无法附加到它,我无法调试。现在我想知道最后调用的函数或回溯,无论如何我能得到这个吗?/proc/pid/stat 下是否有任何信息可以用于此目的?