标签: 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
查看次数

在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
查看次数

获得一个没有异常的python回溯

假设你有这些模块:

module1.py

import module2

def a():
    module1.b()

def c():
    print "Hi guys!"
Run Code Online (Sandbox Code Playgroud)

module2.py

import module1

def b():
    module1.c()
Run Code Online (Sandbox Code Playgroud)

我想要一个func(a())产生类似输出的函数:(=一个追溯?)

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   3 def a():
   4     module1.b()

   1 import module1

 /usr/local/lib/python2.7/dist-packages/test/module2.py
   3 def b():
   4     module1.c()

   1 import module2

 /usr/local/lib/python2.7/dist-packages/test/module1.py
   6 def c():
   7     print "Hi guys!"
Run Code Online (Sandbox Code Playgroud)

有可能使用标准模块traceback和/或cgitb和/或inspect我很难从文档中找出这些模块.

我认为它可以做,traceback.print_stack(a())但它只是因为某种原因而一直在加载.我尝试了这些模块中的其他功能但没有成功.

更新3

@jterrace

python trapy_module.py:

import trace

def trapy(arg):
    tracer = trace.Trace()
    tracer.run(arg)
    r = tracer.results()
    r.write_results()

if __name__ == '__main__':
    import random
    trapy('random.random()') …
Run Code Online (Sandbox Code Playgroud)

python pretty-print stack-trace

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

堆栈跟踪方法名称已编辑

当我的应用程序在其设备上崩溃时,我有用户通过电子邮件向我发送堆栈跟踪 在iOS 6之前,它们看起来像这样:

CRASH: NSInvalidArgumentException (*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil)

TRACE: (
0  CoreFoundation                      0x355e58a7 __exceptionPreprocess + 186
1  libobjc.A.dylib                     0x3798c259 objc_exception_throw + 32
2  CoreFoundation                      0x3553a1d7 -[__NSArrayM insertObject:atIndex:] + 186
3  MYAPP                               0x0006c0f7 MYAPP + 188663
4  MYAPP                               0x000652a3 MYAPP + 160419
5  Foundation                          0x3512ac29 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 16
6  Foundation                          0x350826d9 -[NSURLConnectionInternalConnection invokeForDelegate:] + 28
7  Foundation                          0x350826a3 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 198
8  Foundation                          0x350825c5 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 60
9  CFNetwork                           0x34de77f5 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 192
10 …
Run Code Online (Sandbox Code Playgroud)

stack-trace ios6

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

如何获取ParameterInfo值?

我使用下面的代码来获取方法中的调用方法名称及其参数.

var stackTrace = new StackTrace();
var methodName = stackTrace.GetFrame(1).GetMethod().Name;
var parameters = stackTrace.GetFrame(1).GetMethod().GetParameters();

foreach (var parameterInfo in parameters)
{
    var name = parameterInfo.Name;
    var value = "How to get value?";
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是获取该参数的值.有任何想法吗?

c# stack-trace asp.net-mvc-4

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

动态代码中的异常堆栈跟踪中的文件路径和行号错误

我们正在使用System.Reflection.Emit在源代码中从源代码生成代码(是的 - 在编译器中).我们使用MarkSequencePoint等向ILGenerator提供正确的符号信息,并启用AssemblyBuilder上的所有调试标志.程序集在编译它的同一进程中保存在内存中,并直接执行.

当使用Visual Studio调试器逐步完成动态生成的代码的源代码时,它实际上工作得很好,并且Visual Studio似乎完全了解代码来自文件和行号的位置.

无论其-当异常被抛出生成的代码,该System.Exception的对象包含堆栈是完全错误的痕迹.它们指向其他(有效但错误的)文件和行号.它获取了类和方法名称,但指向的文件和行号与实例异常的代码路径无关.

指向的文件是如此无关,似乎无法链接到内联或优化.我能看到的唯一模式是它似乎被一些文件所抵消(在一个假想的按字母顺序排序的源文件列表中,汇编是从中构建的).但是,这种模式并非100%一致,而且这与问题的根源相关联似乎是不合理的.

如果我从Exception构造一个System.Diagnostics.Debug对象,它包含相同的错误信息.

我假设.NET运行时使用相同的元数据来构造Exception堆栈跟踪,因为调试器用于单步执行代码,在这种情况下,这种行为非常奇怪.

我试图在处理动态内存中的程序集时,或者如果有人在其他方面遇到过类似的问题,那么这是否是.NET中的一个已知错误.

.net c# cil stack-trace assemblybuilder

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

没有堆栈的Java"Thread-2"会阻止终止

我有一个非常复杂的java程序,它不会终止.eclipse调试器显示一个可以挂起但没有堆栈跟踪的线程.它被称为"线程-2".

jstack -l线程的输出是:

"Thread-2" #17 prio=5 os_prio=0 tid=0x00007f1268002800 nid=0x3342 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None
Run Code Online (Sandbox Code Playgroud)

我在Thread.start()中添加了一个断点,但我找不到一个名为"Thread-2"的线程.线程刚出现在创建两个"AWT-Event-Queue"线程之后.我不在我的程序中手动创建任何线程.

在主线程和所有其他线程退出并释放JFrame之后,以下线程仍然存在:

Thread [AWT-EventQueue-0] (Running) 
Thread [Thread-2] (Running) 
Thread [DestroyJavaVM] (Running)    
Run Code Online (Sandbox Code Playgroud)

挂起VM时,存在以下线程:

Daemon System Thread [Signal Dispatcher] (Suspended)    
Daemon System Thread [Finalizer] (Suspended)    
Daemon System Thread [Reference Handler] (Suspended)    
Daemon System Thread [Java2D Disposer] (Suspended)  
Daemon System Thread [AWT-XAWT] (Suspended) 
Thread [AWT-EventQueue-0] (Suspended)   
Thread [Thread-2] (Suspended)   
Thread [DestroyJavaVM] (Suspended)  
Run Code Online (Sandbox Code Playgroud)

如何获取有关此线程的更多信息,或允许它终止?

编辑1:

根据Dependency Hierarchyeclipse pom.xml视图,我使用以下第三方库:

guava 17.0 [compile] …
Run Code Online (Sandbox Code Playgroud)

java eclipse debugging multithreading stack-trace

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

JS如何将window.error中的Error对象转换为字符串?

我实施了:

 window.onerror = function (m, s, l, c, e) {
 }
Run Code Online (Sandbox Code Playgroud)

其中 e 是错误对象。例如,它包含:

ReferenceError: rde is not defined
    at Object.bla.cs (domain.pt/bla.js:418:17)
    at n.aanv (domain.pt/bla.js:125:29)
Run Code Online (Sandbox Code Playgroud)

如果我 make e.toString(),则只返回第一行。如何获得3条线?谢谢你。

javascript stack-trace onerror

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

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

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

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

javascript stack-trace

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

Error.stack 仅引用 main.chunk.js 而不是真实文件名

我正在创建一个 React.js 应用程序,在其中我得到这样的堆栈跟踪:

let trace = new Error().stack;
Run Code Online (Sandbox Code Playgroud)

该应用程序是使用创建的 create-react-app

将跟踪发送到服务器时,我得到以下几行:

在 onBlur ( http://localhost:3000/static/js/main.chunk.js:538:82 )

在上面的行中, onBlur是正确的,但文件名不正确。

有没有办法获取在我的项目中命名的文件的名称,而不是main.chunk.js(我假设它是由 webpack 创建的编译文件)?

javascript stack-trace reactjs webpack

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