在python中,当发生异常时,我可以获得关于哪个文件引发错误的详细信息,即使没有捕获:
def hello():
raise Exception;
hello()
Execution result >>
Traceback (most recent call last):
File "exceptionExample.py", line 4, in <module>
hello()
File "exceptionExample.py", line 2, in hello
raise Exception;
Exception
用C++,信息不是有用的:
^{pr2}$ <>如何使C++给出更详细的信息,说明了什么模块引发了错误,从哪个行?在我想不用catch子句。在
您可以创建异常,以便它们在创建时包装堆栈跟踪。仍然请注意只在调试模式下记录此日志,因为记录堆栈跟踪可能是一个安全问题。在
使用调试器也可以帮助您。在
您可以在异常消息中使用
__FILE__
和__LINE__
定义。在例如:
在本例中,我使
Error
继承自std::runtime_error
(它有一个构造函数,允许您以字符串形式传递消息)。。。在另外,看看这个SO问题:Global Exception Handling-注意关于使用
set_terminate
函数的答案。这将允许您安装一个全局处理程序,以确保消息按您的需要打印。这里有一些关于set_terminate()的信息。在Python为未捕获的异常提供堆栈跟踪。我提供的答案只告诉您文件和行号。如果需要堆栈跟踪,一些评论家引用了一些其他问题,这些问题给C++中的建议提供了建议。不过,要小心这个问题的非标准解决方案。在
没有可移植的方法来获取堆栈跟踪,一个诀窍是在函数上下文中使用一个对象来保存信息
in every函数只需在主体的最开始添加一行
^{pr2}$ENTER
如果在抛出之前发生异常,则需要使用global
StackTraceInfo::stack
vector的内容保存当前堆栈跟踪,以便显示消息的人可以访问此信息。请注意,您无法访问异常处理程序中的堆栈信息,因为堆栈已在此时展开。在还请注意,如果应用程序是多线程的,则需要为每个线程使用单独的堆栈,而不是使用全局存储。在
相关问题 更多 >
编程相关推荐