标签: stack-trace

在printStackTrace()上打印完整的调用堆栈?

我需要编写一个小的日志分析器应用程序来处理由我的项目中使用的第三方闭源库(在里面有自定义记录器)生成的一些日志文件.

如果日志中有异常条目,我需要从异常的顶部到实际位置收集有关堆栈跟踪所涉及方法的聚合信息.

不幸的是,默认情况下,Java printStackTrace()不会打印调用堆栈中的每个方法,而是打印一定数量,其余的只是被引用为16 more....

如果我能自己捕获异常,我会使用getStackTrace()并自己打印,但根本原因从未包含在此库引发的异常中.

有没有办法让Java在堆栈跟踪中打印整个调用堆栈?

除了我的情况,常见的日志框架可以选择吗?

编辑:该程序在Sun的JVM上使用JDK 1.5.0_09运行.无法改变这一点.

java logging stack-trace

42
推荐指数
2
解决办法
6万
查看次数

如何强制ruby显示完整的堆栈跟踪?

我刚收到此错误消息:

...
from c:/ruby/lib/ruby/gems/1.8/gems/...
 ... 10 levels...
from c:/ruby/lib/ruby/gems/1.8/gems/...
...
Run Code Online (Sandbox Code Playgroud)

并且bug(当然)隐藏在某处... 10 levels....

如何强制ruby显示完整的堆栈跟踪?

ruby stack-trace

41
推荐指数
1
解决办法
4万
查看次数

什么是Swift的异常堆栈中的死亡和爆炸?

在运行时崩溃的异常堆栈中,Swift经常说参数是Dead或Exploded.它的含义是什么,是否对调试有用?

例如:

-> 0x100209cf0 <function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()+44>: brk    #0x1
Run Code Online (Sandbox Code Playgroud)

谢谢.

error-handling xcode stack-trace ios swift

41
推荐指数
1
解决办法
5364
查看次数

以编程方式获取C#Stack Trace

可能重复:
如何在.NET中打印当前的堆栈跟踪,没有任何异常?

抛出异常时,其文本包含堆栈跟踪.我可以以某种方式获得堆栈跟踪文本(包括文件和行)没有例外吗?

public void f()
{
   //blah
   string stacktrace = ???;
   //blah
}
Run Code Online (Sandbox Code Playgroud)

.net c# stack-trace

38
推荐指数
3
解决办法
3万
查看次数

Flash/ActionScript 3.0中的StackTrace

我想在我的代码的任何函数中看到堆栈跟踪,所以我做了这样的事情来调用它并打印堆栈跟踪:

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有其他方法可以做到这一点.在某些地方,Error类创建堆栈跟踪,但也许它没有使用ActionScript 3.0,所以也许它不可行,但我想知道.

谢谢!

flash stack-trace actionscript-3

37
推荐指数
3
解决办法
2万
查看次数

重新抛出不正确的堆栈跟踪

我用"throw;"重新抛出异常,但堆栈跟踪不正确:

static void Main(string[] args) {
    try {
        try {
            throw new Exception("Test"); //Line 12
        }
        catch (Exception ex) {
            throw; //Line 15
        }
    }
    catch (Exception ex) {
        System.Diagnostics.Debug.Write(ex.ToString());
    }
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

正确的堆栈跟踪应该是:

System.Exception: Test
   at ConsoleApplication1.Program.Main(String[] args) in Program.cs:Line 12
Run Code Online (Sandbox Code Playgroud)

但我得到:

System.Exception: Test
   at ConsoleApplication1.Program.Main(String[] args) in Program.cs:Line 15
Run Code Online (Sandbox Code Playgroud)

但第15行是"抛出"的位置.我用.NET 3.5进行了测试.

c# stack-trace throw rethrow

37
推荐指数
7
解决办法
5636
查看次数

如何读取objective-c堆栈跟踪

我有以下堆栈跟踪:

0 MyApp 0x000833a3 +[TFCrashHandler backtrace] + 26
1 MyApp 0x000836bd TFSignalHandler + 28
2 libsystem_c.dylib 0x33eac727 _sigtramp + 34
3 ??? 0x00000002 0x0 + 2
4 MyApp 0x000803f1 msgpack_unpack_next + 112
5 MyApp 0x0007faeb +[MessagePackParser parseData:] + 74
6 MyApp 0x0007f84b -[NSData(NSData_MessagePack) messagePackParse] + 26
7 MyApp 0x000254c3 +[Http get:params:cacheMins:msgPack:complete:] + 146
...
Run Code Online (Sandbox Code Playgroud)

我想知道如何阅读它:

  • 我假设我从下往上,例如第7行称为第6行,称为第5行,等等.
  • 第4行的'+ 112'是什么意思?这是代码文件中的行号,它崩溃了吗?
  • 什么是'???' 3号线是什么意思?

非常感谢

iphone objective-c stack-trace

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

Java记录器,自动确定调用者的类名

public static Logger getLogger() {
    final Throwable t = new Throwable();
    final StackTraceElement methodCaller = t.getStackTrace()[1];
    final Logger logger = Logger.getLogger(methodCaller.getClassName());
    logger.setLevel(ResourceManager.LOGLEVEL);
    return logger;
}
Run Code Online (Sandbox Code Playgroud)

此方法将返回一个记录器,该记录器知道它正在记录的类.反对它的任何想法?

许多年后:https://github.com/yanchenko/droidparts/blob/master/droidparts/src/org/droidparts/util/L.java

java logging stack-trace

35
推荐指数
6
解决办法
6万
查看次数

如何将函数地址映射到*.so文件中

backtrace函数给出一组回溯如何用函数名/文件名/行号映射它?

for ex:-
backtrace() returned 8 addresses
./libtst.so(myfunc5+0x2b) [0xb7767767]
./libtst.so(fun4+0x4a) [0xb7767831]
./libtst.so(fun3+0x48) [0xb776787f]
./libtst.so(fun2+0x35) [0xb77678ba]
./libtst.so(fun1+0x35) [0xb77678f5]
./a.out() [0x80485b9]
/lib/libc.so.6(__libc_start_main+0xe5) [0xb75e9be5]
./a.out() [0x80484f1]
Run Code Online (Sandbox Code Playgroud)

从上面的堆栈我怎样才能获得文件名和行号?我做了以下事情,但没有运气.如果我错了,请纠正我:)

for ex:-
./libtst.so(fun2+0x35) [0xb77dc887]

0xb77dc887(fun2 addr+offset)-0xb77b6000 (lib starting addr) = 0x26887 (result)
result is no way related to function in nm output.

I used addr2line command:-
addr2line -f -e libtst.so 0xb77dc887
??
??:0
Run Code Online (Sandbox Code Playgroud)

那么,我如何在运行时或运行后解析?提前致谢...

nm:-
00000574 T _init
00000680 t __do_global_dtors_aux
00000700 t frame_dummy
00000737 t __i686.get_pc_thunk.bx
0000073c T myfunc5
000007e7 T fun4
00000837 T fun3 …
Run Code Online (Sandbox Code Playgroud)

c debugging shared-libraries stack-trace

34
推荐指数
4
解决办法
3万
查看次数

什么时候在window.onError函数上提供正确的堆栈跟踪?

许多其他编程语言(例如java,ruby)中的异常/错误总是提供stacktrace/backtrace信息.

在JavaScript中未处理的错误被window.onError捕获.

虽然该函数没有获取Error对象,但我们无法访问该对象的stack属性.

是否有任何可靠的信息来源,关于何时会有任何变化?

javascript error-handling stack-trace

34
推荐指数
2
解决办法
8919
查看次数