我想在几个超类上有更详细的日志调试/日志记录输出,因此子类名称实际上不会影响实时性能,也不会影响应用程序逻辑.我也认为通常这样做是相当糟糕的设计,但是我真的希望在开发运行期间记录这些信息.
假设我有一个如下所示的简单类结构,如何将子类的名称拉入超类而不必显式传递引用?
public abstract AbstractClass {
private Logger logger = LoggerFactory.getLogger(getClass());
public AbstractClass() {}
public void execute(ContextObject context) {
if (logger.debuggingEnabled()) {
String invokingClassName = ""; // <-- how do I get this?
logger.debug("Executing {}", invokingClassName);
}
// shared application logic is here...
}
}
public MyClass extends AbstractClass {
public MyClass() {}
@Override
public void execute(ContextObject context) {
super.execute(context);
// application logic...
}
}
Run Code Online (Sandbox Code Playgroud)
我曾经使用过解析堆栈跟踪,我怀疑如果我想要这些信息,那就是我必须走的路线.有谁知道一个库会为我做这个或一个很好的代码片段?
我打开了健康监控,我有以下错误,我正在努力理解:
例外:
Exception information:
Exception type: System.InvalidCastException
Exception message: Specified cast is not valid.
Thread information:
Thread ID: 5
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at _Default.Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource)
at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e)
at _Default.up1_Load()
at _Default.Timer1_Tick(Object sender, EventArgs e)
at System.Web.UI.Timer.OnTick(EventArgs e)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Run Code Online (Sandbox Code Playgroud)
我只想弄清楚问题发生的确切位置和它是什么 - 它是在Repeater1_ItemDataBound子程序中发生的,还是在Timer1_Tick子程序中发生的?在跟踪的顶部或底部发生错误之前发生的最后一件事情是什么?
任何帮助非常感谢
谢谢
在我的项目中,我使用log4j来记录错误和许多框架:AOP,spring等.
当我在stacktrace中调用第一行时,这意味着什么,例如:
com.foo.bar.MyException: Error
at com.foo.bar.MyClass.handleException(MyClass.java:92)
at com.foo.bar.MyClass.myMethod(MyClass.java:76)
at com.foo.bar.MyClass.myMethod(MyClass.java:1) // <- here ???
...
Run Code Online (Sandbox Code Playgroud)
在第一行,我的类是注释,一切都正确编译
MyClass.java:
/* Copyright 2011 */
package com.foo.bar;
import ...
public class MyClass implements MyInterface {...
Run Code Online (Sandbox Code Playgroud) 我在iis7(win7)上的localhost上运行了一个asp.mvc web应用程序,并且我没有使用调用堆栈获得正常的黄色死机屏幕.我总是得到一个充满随机不可读字符的页面.有没有人见过这个?我如何收回我的callstack?

可以说我有3节课:
class A {
void do_A() {
//Check object call hierarchy
}
}
class B {
void do_B() {
A a;
a.do_A();
}
}
class C {
void do_C() {
B b;
b.do_A();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我打电话给:
C c;
c.do_C();
Run Code Online (Sandbox Code Playgroud)
如何从A的do_A()中获取对象调用层次结构?
我的意思是我希望在a.do_A()中获得对象的引用(可以很容易地实现this),对象b的引用调用a.do_A(),以及对象c的引用调用b.do_B().
我认为这应该是可能的,因为我可以通过调用堆栈获得调用层次结构,所以我确信我应该能够获得有关调用这些方法的对象的更多信息.
这是其中一个堆栈跟踪的示例,如何从中修复我的应用程序?谷歌市场上还有其他任何工具可以帮助我吗?
java.lang.IllegalStateException:未知URL:content:// media/external/audio/albumart/-1,位于android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java)的android.os.Parcel.readException(Parcel.java:1255) :160)在android.content.ContentProviderProxy.insert(ContentProviderNative.java:450)的android.doc.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)的android.content.ContentResolver.insert(ContentResolver.java:587) com.multi.board.series9button.onContextItemSelected(series9button.java:95)中的.multi.board.series9button.function2(series9button.java:155)位于com的android.app.Activity.onMenuItemSelected(Activity.java:2206). android.internal.policy.impl.PhoneWindow $ ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2781)位于com.android.internal.view的com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158). menu.MenuBuilder.performItemAction(MenuBuilder.java:855)at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDia)logHelper.java:137)在android.widget.ListView的android.widget.AdapterView.performItemClick(AdapterView.java:284)的com.android.internal.app.AlertController $ AlertParams $ 3.onItemClick(AlertController.java:876). performItemClick(ListView.java:3382)在Android.os.Handler.dispatchMessage(Handler)上的android.widget.AbsListView $ PerformClick.run(AbsListView.java:1696)android.os.Handler.handleCallback(Handler.java:587) .java:92)在android.app.Looper.loop(Looper.java:144)的android.app.ActivityThread.main(ActivityThread.java:4937)at java.lang.reflect.Method.invokeNative(Native Method)at at java.lang.reflect.Method.invoke(Method.java:521)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:626)at dalvik.system.NativeStart.main(Native Method)
编辑:
我实际上称它为功能2!什么是糟糕的编程.这是功能.问题是我无法通过我的手机或其他任何我试过的机器崩溃....
Run Code Online (Sandbox Code Playgroud)public void function2(int id){ Toast.makeText(this, "Set as notification",Toast.LENGTH_SHORT).show(); String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)String path = sdcard + "/multi10/" + Global.currentboard +"/ series9";
Run Code Online (Sandbox Code Playgroud)File k = new File(path, Global.currentsound); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA,k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE,"MultiboardNotif"); values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/mpeg"); values.put(MediaStore.Audio.Media.ARTIST,"未知艺术家"); values.put(MediaStore.Audio.Media.IS_RINGTONE,false); values.put(MediaStore.Audio.Media.IS_NOTIFICATION,true); values.put(MediaStore.Audio.Media.IS_ALARM,false); values.put(MediaStore.Audio.Media.IS_MUSIC,false);
Run Code Online (Sandbox Code Playgroud)Uri uri =MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
getContentResolver().delete(uri,MediaStore.MediaColumns.TITLE …
抛出的最后一个异常如何包含java中之前抛出的所有异常?
我从失败安全异常处理中读取失败安全异常处理,我无法理解 这一点"一种方法是确保抛出的最后一个异常包含所有先前抛出的异常." 我们怎样才能做到这一点?
我正在使用php方法getTraceAsString(),这将抛出我的错误消息,如:
#0 /var/www/wordpress/wp-content/themes/Aisis-Framework/AisisCore/Template/Builder.php(147): AisisCore_Template_Builder->_render_template_array(Array, 'navigation') #1 /var/www/wordpress/wp-content/themes/Aisis-Framework/index.php(3): AisisCore_Template_Builder->render_view('navigation') #2 /var/www/wordpress/wp-includes/template-loader.php(47): include('/var/www/wordpr...') #3 /var/www/wordpress/wp-blog-header.php(16): require_once('/var/www/wordpr...') #4 /var/www/wordpress/index.php(17): require('/var/www/wordpr...') #5 {main}
Run Code Online (Sandbox Code Playgroud)
你可以看到一个巨大的字符串.他们提供的示例将跟踪打印为单独的行.为了得到这个,我有什么必须做的吗?
我正在尝试使用D编译调试我的第一个程序
dmd -debug hello.d
Run Code Online (Sandbox Code Playgroud)
但是当我通过GDB-7.6运行可执行文件时,它似乎不知道在哪里找到源代码并解码堆栈跟踪的格式(及其名称 - 解码).
是否GDB调试DMD生成的可执行文件尚未得到支持或者我错过了什么?
使用Eclipse,可以在Logcat中打印出堆栈跟踪,因此我可以跟踪应用程序中发生异常的确切位置。但是,使用Android Studio时,异常会在窗口中清晰地解析,但是我找不到源代码行和文件。
我尝试探索“ stackState”(见下文),但未找到任何线索。
您应该如何找到它?