我有一个常规的C#代码.我没有例外.我想以编程方式记录当前堆栈跟踪以进行调试.例:
public void executeMethod()
{
logStackTrace();
method();
}
Run Code Online (Sandbox Code Playgroud) 例如,来自Checkstyle的RegexpSingleline检查:
这个检查可用于查找常见的不良做法,例如调用ex.printStacktrace()
但是,我很难找到任何能够提供正确理由的地方,因为堆栈跟踪在跟踪导致异常的原因时非常有用.我所知道的事情:
最终用户永远不应该看到堆栈跟踪(出于用户体验和安全目的)
生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数"特殊"情况下不太可能成为问题)
许多日志记录框架将为您打印堆栈跟踪(我们的不会也不会,我们无法轻易更改它)
打印堆栈跟踪不构成错误处理.它应该与其他信息记录和异常处理相结合.
还有哪些其他原因可以避免在代码中打印堆栈跟踪?
我正在通过套接字程序.在其中,printStackTrace调用IOExceptioncatch块中的对象.
什么是printStackTrace()真正做到?
catch(IOException ioe)
{
ioe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我不知道它的目的.它是干什么用的?
在我的应用程序中,我通过PMD运行我的代码.它向我显示了这条消息:
- 避免使用printStackTrace(); 请使用记录器调用.
那是什么意思?
这可能是一个新手问题,但希望你能帮助我.:)我有这样的事情:
try
{
//try to do something there
}
catch (IOException e)
{
//handle the exception
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用NetBeans IDE,出于某种原因,printStackTrace在一个波浪线中加下划线.当我按Alt + Enter时,它表示应删除Throwable.printStackTrace().这是什么意思?任何人都可以提供更多见解,这可能意味着什么?或者我可以忽略这个吗?
谢谢!
在像这样的Android Exceptions中使用printStackTrace()是一个坏主意吗?
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 如何使用 java.util.Logger 打印整个堆栈跟踪?(没有恼人的Netbeans).
该问题应该最初指定保留在 Java SE中.省略这个要求对我来说是一个错误.
-do-compile:
[mkdir] Created dir: /home/thufir/NetBeansProjects/rainmaker/build/empty
[mkdir] Created dir: /home/thufir/NetBeansProjects/rainmaker/build/generated-sources/ap-source-output
[javac] Compiling 13 source files to /home/thufir/NetBeansProjects/rainmaker/build/classes
[javac] /home/thufir/NetBeansProjects/rainmaker/src/model/TelnetEventProcessor.java:44: error: 'void' type not allowed here
[javac] log.severe(npe.printStackTrace(System.out));
[javac] ^
[javac] 1 error
BUILD FAILED
Run Code Online (Sandbox Code Playgroud)
代码有错误:
package model;
import java.util.Observable;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TelnetEventProcessor extends Observable {
private static Logger log = Logger.getLogger(TelnetEventProcessor.class.getName());
private String string = null;
public TelnetEventProcessor() {
}
private void stripAnsiColors() {
Pattern regex = …Run Code Online (Sandbox Code Playgroud) java nullpointerexception throwable java.util.logging printstacktrace
我正在使用Clojure,我想抓住我可以记录的堆栈跟踪(理想情况下,我想将它作为String).
我看到它(.getStackTrace e)返回了一个,StackTraceElement[]但我不知道如何打印出有意义的东西.我的第二种方法是(.printStackTrace e)使用PrintWriter作为参数(因为我知道这在Java中是可行的),但我似乎没有得到正确的语法.
谢谢.
有时回溯足以诊断问题.但是,如果没有知道传递给函数的内容,有时崩溃的原因并不明显.
获取传递给导致崩溃的函数的信息将非常有用,尤其是在再现不明显的情况下,因为它是由例如网络连接中的异常,奇怪的用户输入或者因为程序依赖于随机化或来自外部的处理数据引起的传感器.
可以说有以下程序
def handle_changed_input(changed_input)
raise 'ops' if changed_input =~ /magic/
end
def do_something_with_user_input(input)
input = "#{input.strip}c"
handle_changed_input(input)
end
input = gets
do_something_with_user_input(input)
Run Code Online (Sandbox Code Playgroud)
用户输入"magic"作为输入.通常一个人有
test.rb:2:in `handle_changed_input': ops (RuntimeError)
from test.rb:7:in `do_something_with_user_input'
from test.rb:11:in `<main>'
Run Code Online (Sandbox Code Playgroud)
作为输出.还有什么可以显示传递给函数的内容?就像是
test.rb:2:in `handle_changed_input("magic")': ops (RuntimeError)
from test.rb:7:in `do_something_with_user_input("magi\n")'
from test.rb:11:in `<main>'
Run Code Online (Sandbox Code Playgroud)
它在许多情况下都很有用(并且在参数不能表示为合理的字符串的情况下并不真正有用,因此有一个很好的理由为什么默认情况下不启用它).
如何添加此功能?程序必须在正常操作期间正常工作,并且优选地在崩溃之前没有额外的输出.
我试过这个例子
def do_something_with_user_input(input)
method(__method__).parameters.map do |_, name|
puts "#{name}=#{binding.local_variable_get(name)}"
end
raise 'ops' if input =~ /magic/
end
input = gets
Run Code Online (Sandbox Code Playgroud)
发现是否有办法在Ruby中访问方法参数?但它会打印在每个入口处,以便能够充分发挥输出功能并使程序显着变慢.
有关如何以跨浏览器方式在javascript中生成堆栈跟踪的任何建议?
较新的浏览器Chrome和Firefox公开了一个允许生成堆栈跟踪的控制台对象.此方法不提供将堆栈跟踪存储到变量的方法.
https://github.com/eriwen/javascript-stacktrace 工作得非常好,但它会单独的ajax请求加载脚本文件作为跟踪的一部分.这似乎是跟踪库中的常用方法.我猜测浏览器没有公开足够的信息来生成有意义的堆栈跟踪(行号,函数名,文件名,参数等).
printstacktrace ×10
java ×6
stack-trace ×4
exception ×2
logging ×2
.net ×1
c# ×1
clojure ×1
debugging ×1
ioexception ×1
javascript ×1
pmd ×1
ruby ×1
throwable ×1