我构建了一个在我的localhost(tomcat)中完美运行的webapp.但是当我尝试部署时,在init()中速度崩溃,让我在这里留下这个奇怪的堆栈跟踪(抱歉大小):
ERROR [main] (VelocityConfigurator.java:62) - Error initializing Velocity!
org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.Log4JLogChute with the current runtime configuration.
at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206)
at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255)
at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:589)
at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:229)
at org.apache.velocity.app.Velocity.init(Velocity.java:107)
at com.webcodei.velociraptor.velocity.VelocityConfigurator.initVelocity(VelocityConfigurator.java:57)
at com.webcodei.velociraptor.velocity.VelocityConfigurator.configure(VelocityConfigurator.java:42)
at com.webcodei.velociraptor.VelociListener.contextInitialized(VelociListener.java:26)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4336)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …Run Code Online (Sandbox Code Playgroud) 我使用stackwalk64使用最新的symchk.exe和dbghlp.dll在visual studio 2008中为C++生成堆栈跟踪.当我运行独立的exe时,这很好用.但是,当附加调试器时,我死了视觉工作室.我以前有一个解决方法,我将所有的system32符号下载到磁盘,这很好,但最近的更新似乎打破了我的解决方法,即使我更新了符号.理想情况下,我想确定是否附加了visual studio调试器(它只会是VS调试器),因此在这种情况下我可以关闭堆栈跟踪.谢谢你的帮助.
是否有可能记录堆栈跟踪的PHP警告?或者捕获一个警告和error_log()吗?
在我的错误日志中有一些代码会导致警告,但是在不知道堆栈跟踪的情况下,无法知道导致这些警告的原因.
当任何ASP.NET项目(可能是任何.net应用程序)发生异常时,堆栈跟踪将显示开发人员计算机上的路径,即使在生产中也是如此.
怎么改呢?
引擎盖下发生了什么?
我们有一项服务,它将在应用程序域级别(通过Log4net)记录未处理的异常.
我们记录了:
2014-01-28 16:49:19,636 ERROR [49] FeedWrapperService - 未处理的System.NullReferenceException:未将对象引用设置为对象的实例.
此异常没有堆栈跟踪.如果不对异常对象做一些疯狂的事情,这怎么可能呢?
我们的处理代码:
AppDomain.CurrentDomain.UnhandledException += LogAnyExceptions;
private void LogAnyExceptions(object sender, UnhandledExceptionEventArgs e)
{
log.Error("unhandled", (Exception)e.ExceptionObject);
throw (Exception)e.ExceptionObject;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,重新抛出这一点毫无意义,因为AppDomain无论如何都会随着进程而下降,但我认为它不会影响我们的情况.
Windows应用程序事件查看器也只显示此null ref异常并且没有跟踪.
我已经测试了异常处理程序日志记录,它成功记录了堆栈跟踪和任何内部异常.如果它被我们的代码抛出,我们会看到堆栈跟踪.如果它被第三方c#库抛出,那么,我们再次看到至少一个方法的堆栈跟踪(无论是否是重新抛出的异常).在这里,我们看到一个没有堆栈跟踪的托管异常.我不知道这是怎么可能的.
查看反编译的第三方库,它与非托管代码进行对话,引发此异常的事件可能在非托管域中,但是如果没有堆栈跟踪,这种情况怎么会导致托管的空引用异常?
这个问题的原因是间歇性的.我们已经将这段代码在生产中运行了几个月,并且看过它曾经这样做过.这非常怪异.
普遍的共识是,应该将负责此类问题的系统推送到子进程中,这样我们就可以处理问题并安全地自动重启,但知道发生了什么事情会很好.
编辑以包含以下评论信息:
我的异常不是标准的重新抛出,因为堆栈跟踪是null或空.它没有重新投掷方法的名称.进一步挖掘,Exception类可以从序列化信息构造,看起来序列化信息可能包含堆栈跟踪的空字符串,并且可能创建它而不会导致其他错误.我想它可能来自那里,但我不知道它是如何起源的.
我有这样的功能:
function foo() {
throw new Error('`foo` has been removed in favor of `bar`')
}
Run Code Online (Sandbox Code Playgroud)
当有人打电话时foo,我希望堆栈跟踪(错误输出)指向呼叫站点foo,而不是throw内部的线路foo.
例如,我得到了这个:
$ node test.js
/home/ubuntu/tmp/test.js:2
throw new Error('`foo` has been removed in favor of `bar`')
^
Error: `foo` has been removed in favor of `bar`
at foo (/home/ubuntu/tmp/test.js:2:9)
at Object.<anonymous> (/home/ubuntu/tmp/test.js:5:1)
...
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
$ node test.js
/home/ubuntu/tmp/test.js:5
foo()
^
Error: `foo` has been removed in favor of `bar`
at Object.<anonymous> (/home/ubuntu/tmp/test.js:5:1)
...
Run Code Online (Sandbox Code Playgroud) 在我的NodeJS程序中,我解析了一些用户JSON文件.
所以我使用:
this.config = JSON.parse(fs.readFileSync(path));
Run Code Online (Sandbox Code Playgroud)
问题是如果json文件没有正确格式化,抛出的错误就像:
undefined:55
},
^
SyntaxError: Unexpected token }
at Object.parse (native)
at new MyApp (/path/to/docker/lib/node_modules/myApp/lib/my-app.js:30:28)
...
Run Code Online (Sandbox Code Playgroud)
由于它不是真正的用户友好,我想抛出一个Error指定一些用户友好的消息(如"你的配置文件没有很好的格式化"),但我想保持堆栈跟踪,以指向有问题的行.
在我使用的Java世界throw new Exception("My user friendly message", catchedException)中,为了得到导致那个的原始异常.
JS世界怎么可能?
我的应用程序崩溃了,它必须是因为UIAlertController.
仅在UIAlertController可用的iOS 8.x上会出现此问题.奇怪的是,我的应用程序不使用UIAlertViewController或UIAlertView.
报告告诉我:
Trying to dismiss UIAlertController <UIAlertController: 0x172c5d80> with unknown presenter.
Run Code Online (Sandbox Code Playgroud)
怎么会发生这种情况?
我想过
但是没有一个案例让我陷入崩溃.
崩溃日志告诉我的是,操作系统显示一个AlertView,它将附加到我的应用程序窗口,在某些情况下,松散了呈现UIAlertViewController的父视图控制器.
任何想法如何找到问题?
这里是堆栈跟踪
_________________________________
0 CoreFoundation 0x2bc0c45f __exceptionPreprocess + 127
1 libobjc.A.dylib 0x39c79c8b objc_exception_throw + 36
2 CoreFoundation 0x2bc0c3a5 +[NSException raise:format:] + 110
3 UIKit 0x2f4ad13d -[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:] + 414
4 UIKit 0x2f4acf97 -[UIAlertController _dismissAnimated:triggeringAction:] + 28
5 UIKit 0x2f590a0b -[_UIAlertControllerActionView touchesEnded:withEvent:] + 160
6 UIKit 0x2f159567 -[UIWindow _sendTouchesForEvent:] + 520
7 UIKit 0x2f152e31 -[UIWindow sendEvent:] + 542
8 …Run Code Online (Sandbox Code Playgroud) 我想在beta测试期间记录项目中的所有JS错误.现在我用以下方式做到:
window.onerror = myErrHandler;
function myErrHandler(message, url, line)
{
$.ajax({
cache: false,
type: "post",
data: {error:message, url:url, line:line, brouser:navigator.userAgent},
url: "/Home/LogJavaScript/",
async: true
});
return true;
}
Run Code Online (Sandbox Code Playgroud)
但这种方式无法获得有关调用堆栈的任何信息.因此,有关jQuery或任何其他外部脚本中的错误的信息无济于事.
有没有办法改善这种日志记录?
我一直在研究如何捕获JavaScript错误,然后将它们发送到我们自己的系统进行内部日志记录(因此我们可以尝试在可能的情况下进行复制,并修复任何可能的错误).到目前为止,我已经找到了不少付费服务:
该TrackJS一个看起来有趣,但我们真的负担不起每个月花费了没有更多的钱.然后我遇到了这个图片:
http://www.stacktracejs.com/#!/docs/stacktrace-js
我似乎无法忍受它.这是我正在尝试的:
window.onerror = function(msg, file, line, col, error) {
StackTrace.fromError(error).then(callback).catch(errback);
};
var callback = function(stackframes) {
var stringifiedStack = stackframes.map(function(sf) {
return sf.toString();
}).join('\n');
console.log(stringifiedStack);
};
var errback = function(err) {
console.log(err);
};
StackTrace.get().then(callback).catch(errback);
Run Code Online (Sandbox Code Playgroud)
......我得到的就是:
TypeError:ErrorStackParser未定义
var stackframes = ErrorStackParser.parse(error);
任何人都可以建议一个解决方案,或者看看我对stacktrace.js脚本做错了什么?
更新:在下面的帮助下,我至少能够让它现在做点什么.结果你需要多个js库:
但是,我似乎仍然无法继续下去.
var callback = function(stackframes) {
console.log(stackframes)
var stringifiedStack = stamap(function(sf) {
return sf.toString();
}).join('\n');
console.log(stringifiedStack);
};
var errback = function(err) { …Run Code Online (Sandbox Code Playgroud) stack-trace ×10
javascript ×4
exception ×3
c# ×2
node.js ×2
.net ×1
asp.net ×1
c++ ×1
cocoa-touch ×1
deadlock ×1
debugging ×1
error-log ×1
ios ×1
java ×1
jquery ×1
log4j ×1
logging ×1
objective-c ×1
php ×1
servlets ×1
uialertview ×1
velocity ×1
warnings ×1