javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

PHP-日志捕获到的异常

如果我没有在PHP中捕获异常,则会在我的traceback.format_exc()文件中获得带有堆栈跟踪的有用错误消息。 例如,如果我运行:

<?php

  function foo() {
    throw new Exception('Oh no!');
  } 

  foo();

?>

然后将其写入日志:

[2013年3月6日星期三10:35:32] [错误] [客户端86.146.145.175] PHP致命 错误:未捕获的异常“ Exception”,消息为“哦,不!” 在 /var/www/test.php:4\n堆栈跟踪:\ n#0 /var/www/test.php(7): foo()\ n#1 {main} \ n在第4行的/var/www/test.php中抛出

有时我想捕捉异常,但仍然记录该细节。 我在想类似的东西:

<?php

  function foo() {
    throw new Exception('Oh no!');
  } 

  try {
      foo();
  } catch (Exception $e) {
      log_exception($e);
  }

?>

其中traceback.format_exc()将以与为未捕获的异常自动写入的格式基本相同的格式将某些内容写入错误日志-除了使用Caught exception而不是PHP Fatal error: Uncaught exception之外,在字面上可能完全相同。

是否有一个内置函数可以记录这样的异常信息,或将其捕获为字符串? 我正在想象类似于Python中的traceback.format_exc()的东西。

trans by 2020-08-12T04:45:51Z

在同一个catch块中捕获两个异常?

我有一种方法可以抛出两个不同的异常CommuncationExceptionSystemException。在两种情况下,我都执行相同的三行代码块。

try {
 ...
}

catch (CommunicationException ce) {
   ...
}

catch {SystemExcetion se) {
   ... 
}

有可能这样做吗?

try {
   ...
}

catch (CommunicationException ce, SystemException se) {
   ...
}

这样,我就不必编写这么多代码。 我知道我可以将异常处理提取到私有方法,但是由于代码只有3行,因此方法定义将比主体本身花费更多的代码。

trans by 2020-08-12T02:58:32Z

C ++异常类设计

对于一组异常类,什么是好的设计?

我看到了关于哪些异常类应该和不应该做什么的各种内容,但是没有一个简单的设计可以轻松地使用和扩展这些功能。

  1. 异常类不应引发异常,因为这可能直接导致进程终止,而没有机会记录错误等。
  2. 必须有可能获得用户友好的字符串,最好是本地化为其语言的字符串,以便在无法从错误中恢复之前,在应用程序终止自身之前有一些要告诉他们的内容。
  3. 可能需要在堆栈展开时添加信息,例如,如果XML解析器无法解析输入流,能够添加源是来自文件还是通过网络等。
  4. 异常处理程序需要轻松访问处理异常所需的信息。
  5. 将格式化的异常信息写入日志文件(英语,因此此处无翻译)。

使1和4一起工作是我面临的最大问题,因为任何格式和文件输出方法都可能会失败。

编辑:因此,在几个类别中查看了异常类以及与Neil关联的问题之后,似乎完全不考虑项目1(因此忽略了提升建议)似乎是一种惯例,这对我来说似乎是个坏主意。

无论如何,我以为我也会发布我正在考虑使用的异常类。

class Exception : public std::exception
{
    public:
        // Enum for each exception type, which can also be used
        // to determine the exception class, useful for logging
        // or other localisation methods for generating a
        // message of some sort.
        enum ExceptionType
        {
            // Shouldn't ever be thrown
            UNKNOWN_EXCEPTION = 0,

            // The same as above, but it has a string that
            // may provide some information
            UNKNOWN_EXCEPTION_STR,

            // For example, file not found
            FILE_OPEN_ERROR,

            // Lexical cast type error
            TYPE_PARSE_ERROR,

            // NOTE: in many cases functions only check and
            //       throw this in debug
            INVALID_ARG,

            // An error occured while trying to parse
            // data from a file
            FILE_PARSE_ERROR,
        }

        virtual ExceptionType getExceptionType()const throw()
        {
            return UNKNOWN_EXCEPTION;
        }

        virtual const char* what()throw(){return "UNKNOWN_EXCEPTION";}
};


class FileOpenError : public Exception
{
    public:
        enum Reason
        {
            FILE_NOT_FOUND,
            LOCKED,
            DOES_NOT_EXIST,
            ACCESS_DENIED
        };
        FileOpenError(Reason reason, const char *file, const char *dir)throw();
        Reason getReason()const throw();
        const char* getFile()const throw();
        const char* getDir ()const throw();

    private:
        Reason reason;
        static const unsigned FILE_LEN = 256;
        static const unsigned DIR_LEN  = 256;
        char file[FILE_LEN], dir[DIR_LEN];
};

由于所有字符串都通过复制到内部固定大小的缓冲区中进行处理(如果需要则截断,但始终以null终止)来处理点1。

尽管这没有解决第3点,但是我认为无论如何在现实世界中该点的使用都很有限,如果有必要,可以通过抛出新的异常来解决。

trans by 2020-08-12T00:12:27Z

CodeGo.net> Elmah的:没有HttpContext的例外?

我在Application_Start上生成了一个线程,并希望记录异常。 没有ErrorSignal.FromCurrentContext().Raise(ex);,那么如何记录它?

目前,它在我的线程中没有捕获任何异常,并且如果我写ErrorSignal.FromCurrentContext().Raise(ex);,我将收到有关上下文的错误,不能为null。

也许我可以创建一个虚拟的HttpContext,但是以某种方式我认为它不会很好用。

-edit-我尝试了ErrorSignal.Get(new HttpApplication()).Raise(ex);,但似乎没有发现该异常。

trans by 2020-08-11T21:55:13Z

如何在Scala中的默认构造函数中检查构造函数参数并引发异常或声明?

我想检查构造函数参数,并拒绝构造抛出IllegalArgumentException的情况,以防参数设置无效(值不符合预期约束)。 如何在Scala中编写代码?

trans by 2020-08-11T19:59:05Z

例外-MySQL:无法创建/写入文件'/tmp/#sql_3c6_0.MYI'(错误代码:2)-这甚至意味着什么?

由于某种原因,我的生产数据库决定发出此消息。 所有应用程序调用均失败,并显示以下错误:

PreparedStatementCallback; SQL [ /*long sql statement here*/ ]; 
Can't create/write to file '/tmp/#sql_3c6_0.MYI' (Errcode: 2); 
nested exception is java.sql.SQLException: Can't create/write to file '/tmp/#sql_3c6_0.MYI' (Errcode: 2)

我不知道,这甚至意味着什么。 /tmp中没有文件#sql_3c6_0.MYI,由于某种原因,我无法创建带有#字符的文件。 有没有人听说过或看到此错误? 有什么问题和需要注意的地方?

MySQL数据库似乎已启动并正在运行,可以通过控制台进行查询,但应用程序似乎无法通过它进行查询。 应用程序代码/文件没有变化。 它只是突然变蓝了。 因此,我什至不知道从哪里开始看或采用什么解决方法。 有任何想法吗?

trans by 2020-08-10T10:30:13Z

CodeGo.net>使用Exception.D

您如何在工作的C#项目中使用Exception.Data属性?

我想要的答案是一种模式,而不是针对您的应用程序的特定模式。

trans by 2020-08-10T08:07:21Z

我应该了解C ++中的结构化异常(SEH)?

每个C ++开发人员都应该了解关于结构化异常的哪些重要要点?

trans by 2020-08-09T22:33:46Z

例外-在什么情况下不会调用C ++析构函数?

我知道我的析构函数是在正常的堆栈释放时以及引发异常时调用的,而不是在调用exit()时调用的。

在其他情况下,我的析构函数不会被调用吗? 诸如SIGINT或SIGSEGV之类的信号呢? 我假设对于SIGSEGV,它们没有被调用,但是对于SIGNINT,我怎么知道哪些信号将使堆栈退卷?

还有其他情况下将不会调用它们吗?

trans by 2020-08-09T18:05:40Z

为什么没有将向量访问运算符指定为noexcept?

为什么没有将std::vectoroperator[]frontback成员函数指定为noexcept

trans by 2020-08-07T05:02:43Z

Windows / C ++:是否可以找到引发“异常偏移”的异常所在的代码行

我们的一位用户在我们的产品启动时遇到异常。她已从Windows向我们发送了以下错误消息:

  Problem Event Name:                        APPCRASH
  Application Name:                          program.exe
  Application Version:                       1.0.0.1
  Application Timestamp:                     4ba62004
  Fault Module Name:                         agcutils.dll
  Fault Module Version:                      1.0.0.1
  Fault Module Timestamp:                    48dbd973
  Exception Code:                            c0000005
  Exception Offset:                          000038d7
  OS Version:                                6.0.6002.2.2.0.768.2
  Locale ID:                                 1033
  Additional Information 1:                  381d
  Additional Information 2:                  fdf78cd6110fd6ff90e9fff3d6ab377d
  Additional Information 3:                  b2df
  Additional Information 4:                  a3da65b92a4f9b2faa205d199b0aa9ef

是否可以在源代码中找到具有此信息的发生异常的确切位置?

Windows上C ++程序员查找用户计算机上已发生错误的位置的常用技术是什么?

我们的项目使用Release配置进行编译,生成了PDB文件。

我希望我的问题不会太幼稚。

trans by 2020-08-06T03:53:16Z

为什么我的异常类需要序列化?

当您使用Exception类扩展一个类(用于创建新的异常)时,会收到警告,提示您有serialVersionUID。我知道serialVersionUID在序列化和反序列化时起着重要的作用,但是当我的Exception需要序列化时? 谁能给我一个实际的案例,让我的自定义异常类具有序列化和反序列化?

trans by 2020-08-05T18:22:17Z

错误“执行任务需要执行命令”是什么意思?

在Visual Studio中编译项目时,出现错误消息“ exec任务需要执行命令”,没有行号。 这个错误是什么意思?

(向我提出和回答我自己的问题的道歉;在撰写本文时,我刚刚找到了答案。已使其成为社区Wiki,以便不冒犯。)

trans by 2020-08-05T02:17:52Z

Java异常不笑

为什么Java中的某些异常未被Caught NoSuchMethodError java.lang.NoSuchMethodError:捕获? 这是代码由于没有处理的异常而完全失败。 (Java版本1.4)。

public static void main(String[] args) {
    try {
        //Code ...
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我得到了Caught NoSuchMethodError java.lang.NoSuchMethodError:

但这有效

public static void main(String[] args) {
    int exitCode = app.SUCCESS_EXIT_CODE;
    try {
        //Code ...
    } catch (java.lang.NoSuchMethodError mex){
        System.err.println("Caught NoSuchMethodError");
        mex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我得到Caught NoSuchMethodError java.lang.NoSuchMethodError:

我以为捕获异常会捕获所有异常? 如何捕获Java中的所有异常?

trans by 2020-08-04T07:04:55Z

.net-找出方法可能在C#中引发的异常

是否有办法找出.NET代码中任何方法可能引发的异常? 理想情况下,我想看看可能会抛出什么,并选择要处理的对象。 我想我想要从java中的throws子句中获取的信息。

情况是我正在从网络上对xml文档进行linq查询,想知道可能出什么问题。 我可以在反射器中打开组件并进行查看,但我认为可能会有更简单的方法。

trans by 2020-08-03T13:27:14Z

如何在Flex中捕获所有异常?

当我在调试Flash Player中运行Flex应用程序时,一旦发生意外,就会弹出一个异常。 但是,当客户使用该应用程序时,他不使用调试Flash Player。 在这种情况下,他不会弹出异常,但他的UI无法正常工作。

因此,出于支持性的原因,我想捕获Flex UI中任何地方可能发生的任何异常,并在Flex内部弹出窗口中显示错误消息。 通过使用Java,我只是将整个UI代码封装在try / catch块中,但是对于Flex中的MXML应用程序,我不知道在哪里可以执行这样的常规try / catch。

trans by 2020-08-03T05:50:52Z

数组-java.util.AbstractList.remove处的java.lang.UnsupportedOperationException(未知源)

我试过下面的代码

String s[]={"1","2","3","4"};  
Collection c=Arrays.asList(s);  
System.out.println(c.remove("1") +"  remove flag");  

System.out.println(" collcetion "+c);  

我正在

Exception in thread "main" java.lang.UnsupportedOperationException  
at java.util.AbstractList.remove(Unknown Source)  
at java.util.AbstractList$Itr.remove(Unknown Source)  
at java.util.AbstractCollection.remove(Unknown Source)  
at test.main(test.java:26)  

谁能帮我解决这个问题?

trans by 2020-08-02T06:00:09Z

为何try / catch块未捕获.NET异常?

我正在使用C#的ANTLR解析器库进行项目开发。 我已经建立了语法来解析一些文本,并且效果很好。 但是,当解析器遇到非法或意外令牌时,它将引发许多异常之一。 问题是,在某些情况下(不是全部),我的try / catch块无法捕获它,而是将其作为未处理的异常停止执行。

我的问题是,除了完整的代码,我无法在其他任何地方复制此问题。 调用堆栈显示异常肯定在我的try / catch(Exception)块内发生。 我唯一能想到的是,在我的代码和引发异常的代码之间发生了一些ANTLR程序集调用,并且该库未启用调试功能,因此我无法逐步进行调试。 我想知道不可调试的程序集是否会阻止异常冒泡? 调用堆栈如下所示: 外部程序集调用在Antlr.Runtime中:

    Expl.Itinerary.dll!TimeDefLexer.mTokens() Line 1213 C#
    Antlr3.Runtime.dll!Antlr.Runtime.Lexer.NextToken() + 0xfc bytes 
    Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.FillBuffer() + 0x22c bytes   
    Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.LT(int k = 1) + 0x68 bytes
    Expl.Itinerary.dll!TimeDefParser.prog() Line 109 + 0x17 bytes   C#
    Expl.Itinerary.dll!Expl.Itinerary.TDLParser.Parse(string Text = "", Expl.Itinerary.IItinerary Itinerary = {Expl.Itinerary.MemoryItinerary}) Line 17 + 0xa bytes C#

来自Parse()最底部调用的代码片段如下所示:

     try {
        // Execution stopped at parser.prog()
        TimeDefParser.prog_return prog_ret = parser.prog();
        return prog_ret == null ? null : prog_ret.value;
     }
     catch (Exception ex) {
        throw new ParserException(ex.Message, ex);
     }

对我来说,catch(Exception)子句应该捕获任何异常。 有什么理由不这样做吗?

更新:我使用Reflector跟踪了外部程序集,没有发现任何线程化的迹象。 该程序集似乎只是ANTLR生成的代码的运行时实用程序类。 从TimeDefLexer.mTokens()方法引发的异常,其类型为NoViableAltException,该异常派生自RecognitionException-> Exception。 当词法分析器无法理解流中的下一个标记时,将引发此异常。 换句话说,输入无效。 应该发生此异常,但是我的try / catch块应该捕获了此异常。

同样,重新抛出ParserException与这种情况确实无关。 那是一个抽象层,它在解析期间接受任何异常并将其转换为我自己的ParserException。 我遇到的异常处理问题从未达到那行代码。 实际上,我注释掉了“引发新的ParserException”部分,并且仍然收到了相同的结果。

还有一件事,我修改了原始的try / catch块,以捕获NoViableAltException,从而消除了任何继承混乱。 我仍然收到相同的结果。

曾经有人建议有时在调试模式下VS捕获捕获的异常时会过于活跃,但是在发布模式下也会发生此问题。

伙计,我还是很困惑! 我之前没有提到过,但是我正在运行VS 2008,我的所有代码都是3.5。 外部组件为2.0。 另外,我的一些代码在2.0程序集中为一个类提供子类。 版本不匹配会导致此问题吗?

更新2:通过将.NET 3.5代码的相关部分移植到.NET 2.0项目并复制相同的方案,我能够消除.NET版本冲突。 在.NET 2.0中一致运行时,我能够复制相同的未处理异常。

我了解到ANTLR最近发布了3.1。 因此,我从3.0.1升级并重试。 事实证明,生成的代码有些重构,但是在我的测试用例中也会发生同样的未处理异常。

更新3:我已经在一个简化的VS 2008项目中复制了此方案。 随时自行下载和检查项目。 我已经应用了所有很棒的建议,但是还没有克服这个障碍。

如果可以找到解决方法,请分享您的发现。 再次感谢!


谢谢,但是VS 2008会在未处理的异常时自动中断。 另外,我没有Debug-> Exceptions对话框。 引发的NoViableAltException是完全有意的,旨在被用户代码捕获。 由于未按预期捕获它,因此程序执行作为未处理的异常意外中止。

抛出的异常是从Exception派生的,并且ANTLR没有进行多线程处理。

trans by 2020-08-01T22:42:47Z

python-从脚本导入已安装的软件包会引发“ AttributeError:模块没有属性”或“ ImportError:无法导入名称”

我有一个名为requests的脚本,用于导入请求包。 该脚本无法访问包中的属性,也无法导入它们。 为什么这不起作用,我该如何解决?

以下代码引发requests

import requests

res = requests.get('http://www.google.ca')
print(res)
Traceback (most recent call last):
  File "/Users/me/dev/rough/requests.py", line 1, in <module>
    import requests
  File "/Users/me/dev/rough/requests.py", line 3, in <module>
    requests.get('http://www.google.ca')
AttributeError: module 'requests' has no attribute 'get'

The following code raises an requests.

from requests import get

res = get('http://www.google.ca')
print(res)
Traceback (most recent call last):
  File "requests.py", line 1, in <module>
    from requests import get
  File "/Users/me/dev/rough/requests.py", line 1, in <module>
    from requests import get
ImportError: cannot import name 'get'

或从requests包内的模块导入的代码:

from requests.auth import AuthBase
Traceback (most recent call last):
  File "requests.py", line 1, in <module>
    from requests.auth import AuthBase
  File "/Users/me/dev/rough/requests.py", line 1, in <module>
    from requests.auth import AuthBase
ImportError: No module named 'requests.auth'; 'requests' is not a package
trans by 2020-07-30T16:20:06Z

C ++的new运算符可以在现实生活中抛出异常吗?

new操作员可以在现实生活中引发异常吗?

如果是这样,除了杀死我的应用程序之外,我是否还有其他处理此类异常的选项?

更新:

现实世界中有new这类繁重的应用程序是否会检查故障并在没有内存的情况下恢复?


也可以看看:

  • 您多久检查一次C ++新指令中的异常?
  • 测试C ++中“ new”的返回是否有用?
  • 在任何情况下new都将返回NULL吗?
trans by 2020-07-29T10:32:08Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 下一页 共19页