标签: stack-trace

Perl:$ SIG {__ DIE__},eval {}和堆栈跟踪

我有一段Perl代码,有点像下面这样(强烈简化):有一些级别的嵌套子程序调用(实际上是方法),而一些内部代码执行自己的异常处理:

sub outer { middle() }

sub middle {
    eval { inner() };
    if ( my $x = $@ ) { # caught exception
        if (ref $x eq 'ARRAY') {
            print "we can handle this ...";
        }
        else {
            die $x; # rethrow
        }
    }
}

sub inner { die "OH NOES!" }
Run Code Online (Sandbox Code Playgroud)

现在我想更改该代码,以便它执行以下操作:

  • 为每个"冒泡"到最外层(sub outer)的异常打印一个完整的堆栈跟踪.具体来说,堆栈跟踪应该不是在"第一层次停止eval { }".

  • 无需更改任何内部级别的实现.

现在,我这样做的方法是__DIE__outersub中安装一个本地化的处理程序:

use Devel::StackTrace;

sub outer {
    local $SIG{__DIE__} = sub { …
Run Code Online (Sandbox Code Playgroud)

perl eval stack-trace

12
推荐指数
2
解决办法
8650
查看次数

获取完整的字符串堆栈跟踪包括内部异常

Java的e.printStackTrace()不会打印内部异常的堆栈跟踪的所有细节.

有没有现成的方法以字符串形式生成完整的堆栈跟踪?(除了自己格式化)

编辑

我刚刚发现了printStackTrace()的作用 - 显然它过滤掉的堆栈帧正是内部异常和外部异常共有的堆栈帧.所以实际上它是我想要的,而不是"完整"的堆栈跟踪.

java stack-trace

12
推荐指数
2
解决办法
1万
查看次数

在javascript中记录堆栈跟踪错误

我正在尝试在生产网站上记录javascript错误.到目前为止,它与网站中包含的以下代码相得益彰:

function catcherr(errorMessage, url, line) {
    var parameters = "msg=" + escape(errorMessage)
            + "&url=" + escape(url)
            + "&line=" + escape(line);

    new Image().src = "/error.gif?" + parameters;

    return false;
};

window.onerror = catcherr;
Run Code Online (Sandbox Code Playgroud)

我正在尝试向错误添加堆栈跟踪以获取更多信息.这基本上与以下想法一起使用,包括上面的功能:

    try { i.dont.exist += 0; } // does not exist - that's the point
    catch (e)
    {
            if (e.stack) // Firefox
            {
               // do some stuff
Run Code Online (Sandbox Code Playgroud)

我使用jquery,一个简单的例子:

<script type="text/javascript">
jQuery(document).ready(function() {
    p.foo += 1; // this should throw an error
    // do stuff
});
</script>
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我在jquery的"ready"函数中有错误时,"try {i.dont.exist …

javascript error-handling jquery stack-trace onerror

12
推荐指数
2
解决办法
9374
查看次数

如何禁用生产日志文件中的Rails RoutingError stacktrace打印输出?

在我自豪的rails应用程序中,我得到了所有类型的随机攻击请求asp,zip和rar文件.Rails按预期呈现404页面,但我的生产日志文件被如下所示的RoutingError stacktrace转储所堵塞.

我的问题是:我可以在Apache/Passenger中阻止某些模式的URL吗?或者至少我可以配置Rails只记录错误本身而不是打印整个堆栈跟踪?谢谢!

Processing ApplicationController#index (for 100.222.237.7 at 2011-03-22 10:59:54) [GET]

ActionController::RoutingError (No route matches "/include/upfile_flash.asp" with {:host=>"www.myhost.com", :method=>:get, :domain=>"myhost.com", :subdomain=>"www"}):
  passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
  passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application'
  passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
  passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start'
  passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
  passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application'
  passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in …
Run Code Online (Sandbox Code Playgroud)

logging production ruby-on-rails stack-trace

12
推荐指数
2
解决办法
2373
查看次数

堆栈跟踪和反向跟踪之间有什么区别?

我真的虽然在网上找到答案,但我不能.有什么不同吗?人们说在抛出异常时会产生"回溯",而堆栈跟踪则是从应用程序启动时到抛出异常的点的方法调用列表.如果我们将堆栈跟踪视为数组,则最后一个元素将是抛出异常的方法.回溯的情况是否相反?例如,在像Ruby这样的编程语言中,如果我们有:

begin
  raise 1
rescue
  p $!.backtrace ; p caller(0) #=> displays the back-trace, then the stack-trace
end
Run Code Online (Sandbox Code Playgroud)

他们将输出2个不同的阵列,这对我来说,他们有一些根本不同的东西.

ruby stack-trace backtrace

12
推荐指数
1
解决办法
4166
查看次数

如何在不停止脚本的情况下获取JS堆栈跟踪?

如果您throw使用JavaScript,则抛出的错误通常会传播到window.onerror处理程序,这会停止进一步执行脚本.

有没有办法从函数中获取堆栈跟踪而不会导致执行暂停?

javascript stack-trace

12
推荐指数
2
解决办法
3534
查看次数

使用NativeMethodAccessor而不是GeneratedMethodAccessor时,Lambda堆栈跟踪丢失

几天前,我得到了一张支持票NullPointerException:

com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract com.redacted.SalesResponsePagination com.redacted.StatisticsService.findSalesData(com.redacted.ConfStats) throws com.redacted.AsyncException' threw an unexpected exception: java.lang.NullPointerException
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
    at ... (typical GWT + Tomcat stacktrace)
Caused by: java.lang.NullPointerException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.util.concurrent.ForkJoinTask.getThrowableException(Unknown Source)
    at java.util.concurrent.ForkJoinTask.reportException(Unknown Source)
    at java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.forEach(Unknown Source)
    at com.redacted.StatisticsControllerImpl.replacePrices(StatisticsControllerImpl.java:310)
    at com.redacted.StatisticsControllerImpl.findSalesData(StatisticsControllerImpl.java:288)
    at com.redacted.StatisticsServiceImpl.findSalesData(StatisticsServiceImpl.java:83)
    at sun.reflect.GeneratedMethodAccessor752.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at …
Run Code Online (Sandbox Code Playgroud)

java reflection lambda jit stack-trace

12
推荐指数
1
解决办法
265
查看次数

使用atos通过dSYM确定崩溃的方法名称

我有一个来自用户的控制台堆栈(不是崩溃报告),我正在尝试确定我的应用程序中哪个方法调用是最后一个人.

我知道他们正在使用哪个版本的应用程序,并且我有一个该发布/调试版本的副本,以及存档副本的dSYM文件.

但是,当我尝试使用atos吐出内存地址时,它似乎没有帮助.(我在0x000000010e703bc0下面的堆栈中使用.)

craig-mbp:Desktop Craig$ atos -o MyApp.app_1.0.0.dSYM/Contents/Resources/DWARF/MyApp -arch x86_64
0x000000010e703bc0 (<- entered by me)
0x000000010e703bc0 (<- console output)
Run Code Online (Sandbox Code Playgroud)

我需要输入某种偏移吗?或者根据用户提供给我的地址,某种内存地址数学来确定程序内存块中的实际位置?

这是我收到的堆栈跟踪的总和:

28/11/12 10:48:56.220 AM    MyApp[411]  (
    0   CoreFoundation                      0x00007fff8fee90a6 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8e94a3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff8fee8e7c +[NSException raise:format:] + 204
    3   Foundation                          0x00007fff92b1ce5c -[NSPlaceholderString initWithString:] + 93
    4   Foundation                          0x00007fff92b1cde4 +[NSString stringWithString:] + 43
    5   MyApp                               0x000000010e703bc0 MyApp + 23488
    6   MyApp                               0x000000010e70a038 MyApp + 49208
    7   MyApp                               0x000000010e70b41a MyApp + …
Run Code Online (Sandbox Code Playgroud)

debugging xcode objective-c stack-trace

11
推荐指数
1
解决办法
3951
查看次数

如何在IE 8中获取JavaScript异常的堆栈跟踪?

当在IE 8中抛出JavaScript异常时,如何查看其堆栈跟踪?

例如,jQuery中的以下代码捕获异常并重新抛出它.在Visual Studio(2012)中进行调试时,执行会在jQuery捕获异常('e')时中断,但我不能在生命中看到异常源自的堆栈跟踪:

// resolve with given context and args
resolveWith: function( context, args ) {
    if ( !cancelled && !fired && !firing ) {
        firing = 1;
        try {
            while( callbacks[ 0 ] ) {
                callbacks.shift().apply( context, args );
            }
        }
        // We have to add a catch block for
        // IE prior to 8 or else the finally
        // block will never get executed
        catch (e) {
            throw e;
        }
        finally {
            fired = [ context, args …
Run Code Online (Sandbox Code Playgroud)

javascript debugging exception stack-trace internet-explorer-8

11
推荐指数
1
解决办法
5912
查看次数

如何在cocos2d-x中使用android ndk检查崩溃日志

我使用cocos2d-x开发游戏,在iOs中运行完美后,我转向Android平台.

但它在android中运行,我只收到一些错误日志:

08-26 10:49:23.823: A/libc(2884): Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 2917 (Thread-285)
Run Code Online (Sandbox Code Playgroud)

有了这个,我无法修复崩溃日志.

所以我的问题是如何检查崩溃日志的堆栈?

在SO中,有一些类似的问题,但对我没有任何有用的答案.

使用ndk-stack读取崩溃日志

无法从android ndk中的堆栈跟踪中获取行号

如何获得有用的崩溃日志信息Android Cocos2dx C++

c++ android stack-trace android-ndk cocos2d-x

11
推荐指数
1
解决办法
2万
查看次数