问题标签 [printstacktrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
85603 浏览

java - 在 Java 中使用 e.printStackTrace()

这可能是一个新手问题,但希望你能帮助我。:) 我有这样的事情:

我正在使用 NetBeans IDE,由于某种原因,printStackTrace 在波浪线中带有下划线。当我按 Alt+Enter 时,它说 Throwable.printStackTrace() 应该被删除。这是什么意思?谁能提供更多的见解,这可能意味着什么?或者我可以忽略这个吗?

谢谢!

0 投票
9 回答
134848 浏览

java - 为什么 exception.printStackTrace() 被认为是不好的做法?

有很多材料表明打印异常的堆栈跟踪是不好的做法。

例如,来自 Checkstyle 中的 RegexpSingleline 检查:

此检查可用于 [...] 查找常见的不良做法,例如调用 ex.printStacktrace()

但是,我很难找到任何给出合理理由的地方,因为堆栈跟踪对于追踪导致异常的原因肯定非常有用。我知道的事情:

  1. 最终用户不应该看到堆栈跟踪(出于用户体验和安全目的)

  2. 生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数“异常”情况下不太可能成为问题)

  3. 许多日志框架会为您打印堆栈跟踪(我们的不会也不会,我们不能轻易更改)

  4. 打印堆栈跟踪不构成错误处理。它应该与其他信息记录和异常处理相结合。

还有哪些其他原因可以避免在代码中打印堆栈跟踪?

0 投票
1 回答
979 浏览

java - InterruptedException 在 printStacktrace j2me 中引发 NullPointerException

我正在处理 j2me 中的 midlet,并且我有这个线程类(比如称为 chan),它只执行以下操作:

我正在尝试 chan.interrupt(); 从仅执行以下操作的主要 midlet 代码:

我收到的是这样的:

提到的行在 Thread 的 run 方法中:

除了奇怪的堆栈跟踪之外,程序中的一切似乎都运行良好。如果我只是删除printStacktracein Chan 线程,则不会打印这样的 nullpointerException。

所以我不明白这个 nullpointerexception 试图告诉我什么,也不明白为什么 interruptedexception 的堆栈跟踪是 1 行而其余的跟踪丢失了。

模拟器是 Oracle Java(TM) Platform Micro Edition SDK 3.0.5,我正在使用 Netbeans

0 投票
4 回答
2239 浏览

java - 关于 java Throwable

当我开发 android 应用程序时,我想制作一个 CrashReport 类,然后使用它向我的服务器发送报告。

我做了一个CrashHandler类,它实现了UncaughtExceptionHandler,并故意在Activity中做一个NullPoint错误的例子,这个类运行良好,但是在方法uncaughtException中有点问题:</p>

代码行 1 将堆栈跟踪打印为:

但代码行只显示:

你注意到它没有显示:

我知道我没有调用 getCause(),但是当尝试使用 getCause() 时,它返回 null,而不是 throwable;

我试图查看可抛出类的源代码......但注意到

你能告诉我为什么 getCause 为空但 printStackTrace 有一个错误原因打印出来吗?

0 投票
1 回答
509 浏览

java - 如何跟踪所有已执行的功能

我有这个运行方法的线程:

我怎样才能让我跟踪该线程执行的所有函数,注意 init() 和 refresh() 方法可以根据许多外部条件调用许多其他函数。

我试图创建一个NullPointerException或将此处引用的代码行之一放在 run() 方法的中间,但我总是只有最后一个跟踪是 run() 方法(我曾经使用过的同一行打印轨迹)。

或者

或者

PS:我对调试器不是很熟悉,我不知道这是否可以用它来完成。

0 投票
3 回答
861 浏览

python - 在 Python 中处理异常堆栈跟踪的正确方法

我正在编写一些可以在堆栈深处生成异常的代码,并且我有一个更靠近顶部的层,它捕获这些异常并将它们发送给错误处理模块进行处理。我想要的是错误处理模块能够将堆栈跟踪打印到其错误日志中,但我发现很难弄清楚这样做的方法是什么。

关于背景的一些说明:

  • 代码是多线程的,所以我不确定 sys.last_traceback 的行为

  • 我尝试在异常本身的构造函数中捕获堆栈。sys.last_traceback 在这种情况下有时是 None (因为它只存在于未处理的异常的情况下),并不总是正确的。我目前正在玩弄使用

    self.stack = traceback.format_stack()[:-2]

在异常的构造函数中,虽然这在信息方面看起来很有希望,但感觉不是“正确”的方法

  • 我能够找到的所有如何执行此操作的示例都显示了如何在 except 块中打印堆栈跟踪,而不是在以后的一些错误处理模块中,这似乎与我想要的行为不同。(例如,请参阅从 Python 代码中的方法打印当前调用堆栈

  • 我已经在 python 文档(http://docs.python.org/library/traceback.html)中挖掘了追溯模块,并且无法弄清楚这是否符合我的要求。它似乎主要关注格式化回溯,因为您可能从 sys.last_traceback 检索。它有一些使用示例,但没有一个与我正在尝试做的事情一致。

我不相信我是第一个想要这样做的人,所以我一定错过了一些东西。任何指向正确方向的指针都非常感谢。

0 投票
1 回答
4638 浏览

android - 安卓。异常处理

如果用户在使用我的应用程序时发生异常,我希望能够确定异常发生的确切位置。我想做一些类似的 ti printStackTrace() 方法。(所以这是在构建模式,而不是调试模式)

目前,我已经将所有类中的几乎所有方法都放在了 try-catch 语句中(每个方法都有一个包含所有指令的 try-catch 语句),此时我可以显示“树”或堆栈发生异常时的方法。但是有没有办法确定某事物的行号以更准确地指示异常发生在方法内部的哪个位置?类似于使用 printStackTrace() 时显示的内容。

我并没有真正使用异常处理,这样做的最佳实践是什么并且可以做到?

编辑

还有一件事。当我在构建模式下使用 printStackTrace() 时,它在哪里显示内容,因为 Logcat 不可用?我可以检索该信息并对其进行处理吗? 或者 更好的是,我可以在构建模式下使用 getStackTrace() 并将那里的内容转换为 String 并可能将其输出到某个地方吗?

0 投票
7 回答
125596 浏览

java - 避免 printStackTrace(); 改用记录器调用

在我的应用程序中,我通过 PMD 运行我的代码。它向我显示了这条消息:

  • 避免 printStackTrace(); 改用记录器调用。

这意味着什么?

0 投票
2 回答
371 浏览

java - 为什么 Throwable.printStackTrace 采用 PrintWriter 而不是 Writer?

为什么public void printStackTrace(PrintStream s)Throwable类中采用 PrintWriter 而不是 Writer?

我认为 Writer 应该是规范(接口的代码,而不是特定的实现),但它可能是我缺少的东西,因此这个问题。

0 投票
1 回答
1996 浏览

java - 将异常的堆栈跟踪转换为 byte[] 数组或 ByteBuffer (Java) 是否更有效?

我需要将异常记录到数据库中。数据库 API 声明我可以将值作为 ByteBuffer 或 byte[] 数组传递。那么哪个更有效率呢?

对比

我认为如果我使用 ByteBuffer,整体操作会更有效率,尤其是在它被传递到数据库方法之后进行处理时。我对吗?

(具体来说,我需要将异常记录到 Hypertable 中,它使用 Thrift Java API。)