我将我的方法的第一行是:
print "this method was called from "+filename_and_linenumber_of_code_that_called_it.
Run Code Online (Sandbox Code Playgroud)
是否可以抛出异常,立即捕获并在调用方法时打印堆栈跟踪?
我的NLog配置如下
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File" fileName="${basedir}/log${shortdate}.txt" archiveAboveSize="500000" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="10" layout="${date:format=s}|${level}|${callsite}|${identity}|${message}|${exception:format=stacktrace}"/>
<!--<target name="console" xsi:type="Console" />-->
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
<!--<logger name="*" minlevel="Debug" writeTo="console" />-->
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
但是发生异常时不会记录堆栈跟踪.NLog中有错误吗?
我已经创建了一个围绕Nlog的包装器,我记录如下
public void Error(string message, Exception ex)
{
logger.Error(message, ex);
}
Run Code Online (Sandbox Code Playgroud)
我在日志中收到消息,但没有收到堆栈跟踪.
提前致谢
我正在使用 Maven 3.0.3、Spring 3.1.1.RELEASE 和 JUnit 4.8.1。我有一个像下面这样的测试......
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class SBTrainerDaoTest
{
Run Code Online (Sandbox Code Playgroud)
当我使用命令行(“mvn clean test”)在 Maven 中运行它时,应用程序上下文无法加载,我得到如下模糊错误(打印到控制台和 surefire 文件)......
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at …Run Code Online (Sandbox Code Playgroud) 我有三个名为的课程FirstClass,SecondClass and ThirdClass.以下是三个类的来源:
FirstClass.java
public class FirstClass {
public void firstMethod(){
SecondClass secondClass = new SecondClass();
secondClass.secondMethod();
}
public static void main(String[] args) {
FirstClass firstClass = new FirstClass();
firstClass.firstMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
SecondClass.java
public class SecondClass {
public void secondMethod(){
ThirdClass thirdClass = new ThirdClass();
thirdClass.thirdMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
ThirdClass.java
public class ThirdClass {
public void thirdMethod(){
System.out.println("Here i need to print where the call comes from,(call hierarchy) Is it possible?");
}
}
Run Code Online (Sandbox Code Playgroud)
在最后的方法(这里是ThirdClass.thirdMethod())我需要打印方法调用来自哪里(我的意思是调用层次结构).所以我需要写在thirdMethod()该
使用http.Post() 进行编码。如果我构建exe,就可以了。如果我构建 C 共享库-buildmode=c-shared,它会挂在 https.Post() 上。
我试过strace -fp PID:
futex(0x7f618b2c1cd0, FUTEX_WAKE, 1) = 0
futex(0xc820022110, FUTEX_WAIT, 0, NULL
Run Code Online (Sandbox Code Playgroud)
我试图添加分析器:
http.ListenAndServe("localhost:6060", nil)
http.Post()
Run Code Online (Sandbox Code Playgroud)
但是它再次挂在 http.Post 上,并且分析器也被阻止了(它正在侦听,但不是来自 6060 端口的响应)。我已经发送了 SIGQUIT 信号 - 堆栈跟踪:
SIGQUIT: quit
PC=0x7f0cad5c9081 m=1
goroutine 0 [idle]:
runtime.futex(0xc820022110, 0x0, 0x0, 0x0, 0x7f0c00000000, 0x7f0cad577879, 0x0, 0x0, 0x7f0cad577ae8, 0xc820022110, ...)
/usr/local/go/src/runtime/sys_linux_amd64.s:288 +0x21
runtime.futexsleep(0xc820022110, 0xc800000000, 0xffffffffffffffff)
/usr/local/go/src/runtime/os1_linux.go:39 +0x53
runtime.notesleep(0xc820022110)
/usr/local/go/src/runtime/lock_futex.go:142 +0xa8
runtime.stoplockedm()
/usr/local/go/src/runtime/proc1.go:1268 +0xb2
runtime.schedule()
/usr/local/go/src/runtime/proc1.go:1590 +0x72
runtime.park_m(0xc820000600)
/usr/local/go/src/runtime/proc1.go:1698 +0x191
runtime.mcall(0x7f0cad5c722a)
/usr/local/go/src/runtime/asm_amd64.s:204 +0x53
goroutine 17 [IO …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试调试我的 C++ 应用程序中的核心。客户报告了SEGFAULT具有以下线程列表的核心:
...Other threads go above here
3 Thread 0xf73a2b70 (LWP 2120) 0x006fa430 in __kernel_vsyscall ()
2 Thread 0x2291b70 (LWP 2212) 0x006fa430 in __kernel_vsyscall ()
* 1 Thread 0x218fb70 (LWP 2210) 0x00000000 in ?? ()
Run Code Online (Sandbox Code Playgroud)
令我困惑的是崩溃的线程指向0x00000000. 如果我尝试检查回溯,我会得到:
Thread 1 (Thread 0x1eeeb70 (LWP 27156)):
#0 0x00000000 in ?? ()
#1 0x00281da7 in SomeClass1::_someKnownMethod1 (this=..., elem=...) at path_to_cpp_file:line_number
#2 0x0028484d in SomeClass2::_someKnownMethod2 (this=..., stream=..., stanza=...) at path_to_cpp_file:line_number
#3 0x002958b2 in SomeClass3::_someKnownMethod3 (this=..., stream=..., elem=...) at path_to_cpp_file:line_number
Run Code Online (Sandbox Code Playgroud)
我对编辑表示歉意——这是保密协议的局限性。 …
一个Exception对象有一个StackTrace属性。但它只是一个字符串。
有没有办法从 中获取实际System.Diagnostics.StackTrace对象Exception?
我问是因为我从 an 获取 Exception 对象,但UnhandledExceptionEventHandler我无权访问生成异常的框架来获取实际的堆栈跟踪。
我正在将我的Django网站作为UWSGI皇帝的附庸。我创建/etc/uwsgi-emperor/vassals/mysite.ini如下:
[uwsgi]
socket = /var/opt/mysite/uwsgi.sock
chmod-socket = 775
chdir = /opt/mysite
master = true
virtualenv = /opt/mysite_virtualenv
env = DJANGO_SETTINGS_MODULE=mysite.settings
module = mysite.wsgi:application
uid = www-data
gid = www-data
processes = 1
threads = 1
plugins = python3,logfile
logger = file:/var/log/uwsgi/app/mysite.log
vacuum = true
Run Code Online (Sandbox Code Playgroud)
但是我得到的唯一日志是这样的:
[pid: 2887|app: 0|req: 7/7] 1.2.3.4 () {52 vars in 936 bytes} [Fri Oct 13 20:46:04 2017] POST /mysite/login/ => generated 27 bytes in 2453 msecs (HTTP/1.1 500) 4 headers in 126 bytes (2 …Run Code Online (Sandbox Code Playgroud) 我可以编译所有 boost:stacktrace 的例子。这是我的 bash 脚本:
#!/bin/bash
export CXX=~/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-g++
export BOOST_INCLUDE=$HOME/x-libs/$($CXX -dumpmachine)/include
export BOOST_LIB=$HOME/x-libs/$($CXX -dumpmachine)/lib
export BOOST_SUFFIX="mt-d"
(ls $BOOST_LIB/*$BOOST_SUFFIX.a | tr "\n" "\0" | xargs -0 -n 1 basename | while read A; do B=-l$(echo $A | sed -e 's/^lib//' | sed -e 's/\.a//'); echo $B; done;) | tr "\n" " " > $BOOST_LIB/list_boost.txt
export BOOST_LIBS="cat $BOOST_LIB/list_boost.txt"
export EXECUTABLE_SUFFIX=""
$CXX -w -g3 -o assert_handler-$($CXX -dumpmachine)$EXECUTABLE_SUFFIX assert_handler.cpp -std=c++11 -static -I$BOOST_INCLUDE -L$BOOST_LIB $(eval $BOOST_LIBS) -ldl
$CXX -w -g3 -o debug_function-$($CXX -dumpmachine)$EXECUTABLE_SUFFIX debug_function.cpp -std=c++11 …Run Code Online (Sandbox Code Playgroud) 我只想显示下面的 TypeError 行,但隐藏所有内部详细信息(以下 7 行均以 at 开头)。
~/Desktop/Practice> node "c:\Users\User\Practice\PracJS.js"
c:\Users\User\Practice\PracJS.js:6
let b = duck.prototype.isPrototypeOf(Bird)
^
TypeError: Cannot read property 'isPrototypeOf' of undefined
at Object.<anonymous> (c:\Users\User\Practice\PracJS.js:6:24)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
Run Code Online (Sandbox Code Playgroud)
我知道我可以Error.stackTraceLimit = 0通过将它包含在文件中来做到这一点。但我想默认这样做。
有什么方法可以将 Node 指向一个配置文件(Error.stackTraceLimit = 0在里面设置),这样无论何时我运行node PracJS.js(在 VSCode 中),它都会自动应用Error.stackTraceLimit = 0?
任何帮助表示赞赏!谢谢!