我的程序是用dietlibc静态编译的.它是在ubuntu x64上编译的(使用-m32标志为x86编译),并在centos x86上运行.
编译后的大小只有大约100KB.我用-ggdb3编译它,没有优化标志.
我的程序使用signal.h来处理SIGSEGV信号,然后调用abort().
程序运行好几天但有时会出现段错误.这是我得到奇怪的回溯,我不明白:
username@ubuntu:~/Desktop$ gdb -c core.28569 program-name GNU gdb (GDB) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-linux-gnu --target=i386-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from program-name...done. [New Thread …
如何在Javascript中获得回溯?
理想特色:
这可以在标准的ECMAScript中完成吗?
如果没有,可以在常见的网络浏览器方言中完成吗?
谢谢.
谢谢你的建议.
我的方言不支持arguments.caller或arguments.callee.
我可以做这个:
try {
let x = null;
x .foo ();
}
catch (e) {
debug (dump (e.stack));
}
Run Code Online (Sandbox Code Playgroud)
这让我得到了一个字符串的信息,一目了然,但走路会很有帮助e.stack.它有标准表格吗?
再次感谢.
我试图在Rails应用程序中使用ruby调试器.
我需要在(rdb:1)提示符下键入什么命令才能显示堆栈跟踪?我试过了backtrace,但它只列出了最顶层的框架.
是否有可能(使用插件或可能是一些配置选项)使javascript错误控制台显示错误回溯?
我有一个插件,可以访问length许多元素的属性.但是,javascript控制台指向jquery.min.js的第12行.
如何回溯以查找插件中的违规行?
我想以类似于在gdb中完成的格式从Linux中的C++程序转储回溯.为此,我尝试使用backtrace()和backtrace_symbols()函数.这些返回的函数名称和偏移量.我可以使用__cxa_demangle()函数来获取可读的函数名称.
有没有办法获得文件/行位置,因为它是由gdb完成的?
我有一个拥有数十个虚拟主机的专用服务器.我想确定调用mail()函数的文件并全局记录.我需要这样的东西:
[Wed Feb 13 10:42:39 2013] mail() called from /var/www/example1.php on line 70
[Wed Feb 13 10:42:40 2013] mail() called from /var/www/example2.php on line 70
Run Code Online (Sandbox Code Playgroud)
我不能使用debug_backtrace()或类似的,因为我无法将其添加到服务器中的任何PHP文件.我可以在文件中全局记录所有函数调用,例如将错误记录到error.log这样的文件中吗?
谢谢
我在程序中的某个点上进行了堆栈跟踪.一旦与libc中的backtrace_symbols()功能,一旦与unw_get_proc_name()来自libunwind.
backtrace_symbols()输出:
/home/jj/test/mylib.so(+0x97004)[0x7f6b47ce9004]
Run Code Online (Sandbox Code Playgroud)
unw_get_proc_name()输出:
ip: 0x7f6b47ce9004, offset: 0x458e4
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到指令指针地址(0x7f6b47ce9004)是相同且正确的.功能失调0x97004来自backtrace_symbols()也是正确的,但没有一个我从拿到unw_get_proc_name() (0x458e4).
有人知道这里发生了什么以及可能导致这种抵消差异的原因是什么?
两种方法都使用类似的代码,如下面的示例:
回溯():
void *array[10];
size_t size;
size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
Run Code Online (Sandbox Code Playgroud)
libunwind:
unw_cursor_t cursor;
unw_context_t context;
unw_getcontext(&context);
unw_init_local(&cursor, &context);
while (unw_step(&cursor) > 0) {
unw_word_t offset, pc;
char fname[64];
unw_get_reg(&cursor, UNW_REG_IP, &pc);
fname[0] = '\0';
(void) unw_get_proc_name(&cursor, fname, sizeof(fname), &offset);
printf ("%p : (%s+0x%x) [%p]\n", pc, fname, offset, …Run Code Online (Sandbox Code Playgroud) Fresh Rails 4.2设置.我想抑制长错误回溯.在下面的回溯日志中,第一行对我来说已经足够了,接下来的4行可以删除
ActionController::RoutingError (No route matches [GET] "/user"):
actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
web-console (2.1.2) lib/web_console/middleware.rb:37:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.1) lib/rails/rack/logger.rb:38:in `call_app'
Run Code Online (Sandbox Code Playgroud)
我添加了一个新的消音器 backtrace_silencers.rb
# config/initializers/backtrace_silencers.rb
Rails.backtrace_cleaner.add_silencer { |line| line =~ /lib/ }
Run Code Online (Sandbox Code Playgroud)
服务器重启后 - 没有任何反应,我仍然得到相同的回溯日志.(/lib/应该删除每一行匹配:http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.htm)
完整性检查:
> line = "actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'"
=> "actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'"
> line =~ /lib/
=> 19
Run Code Online (Sandbox Code Playgroud)
但过滤器工作:
# config/initializers/backtrace_silencers.rb
Rails.backtrace_cleaner.add_filter { |line| line.gsub('lib', 'yeah!') }
Run Code Online (Sandbox Code Playgroud)
现在回溯看起来像这样:
ActionController::RoutingError (No route matches [GET] "/user"): …Run Code Online (Sandbox Code Playgroud) 我的应用程序需要通过标准输出将日志以 JSON 格式发送到 fluentd。
当我试图处理恐慌并将 a&std::panic::PanicInfo作为 JSON安排时std::panic::set_hook,我找不到从 a 中检索回溯的方法&PanicInfo。
有没有办法从自定义钩子中的恐慌中检索回溯?