Questions tagged «error-messages»

9
缺乏编译器错误词汇表使新手程序员感到沮丧
我一家人的朋友在学习编程(用C语言)时向我寻求帮助。在我们交谈时,他对很难理解自己的编译器(GCC)在出错时向他发送的错误消息感到沮丧。他不理解所有使用的术语,有时是它们的组合超出了他的理解。他问我:“编译器文档为什么不包含对错误消息的更长解释?” 我对他没有一个好的答案。 我本人-作为一个经验丰富的程序员-在这种情况下很少见,但那些罕见的情况确实发生了-我以前从未遇到过的一些奇怪的错误消息。我设法在搜索引擎中查找错误消息,但是显然这并不总是对他有用-尤其是因为他遇到的错误更常见并且发生在多个不同的情况下,这与他的问题有关拥有。 那么,新手程序员应该如何应对理解编译器错误消息的挑战?具体来说,结合C和GCC?

6
使用全局唯一的消息ID使代码可查找
查找脚本的常见模式遵循以下脚本: 观察奇怪的地方,例如没有输出或挂起的程序。 在日志或程序输出中找到相关消息,例如“找不到Foo”。(以下内容仅在找到错误所在的路径时才有意义。如果堆栈跟踪或其他调试信息容易获得,则是另一回事了。) 找到打印消息的代码。 调试Foo输入(或应该输入)图片到消息打印的第一处之间的代码。 第三步是调试过程经常停止的地方,因为在代码中有很多地方Could not find {name}都打印了“找不到Foo”(或模板字符串)。实际上,几次拼写错误使我找到实际位置的速度比我原本要快得多-它使消息在整个系统中(通常在整个世界)都是唯一的,从而导致相关搜索引擎立即受到攻击。 由此得出的明显结论是,我们应该在代码中使用全局唯一的消息ID,将其作为消息字符串的一部分进行硬编码,并可能验证代码库中每个ID仅出现一次。在可维护性方面,该社区认为此方法最重要的利弊是什么,您将如何实施此方法或以其他方式确保永远不必实施它(假设该软件将始终存在错误)?

6
应该向用户显示多少有关错误的信息?
应用程序总是会抛出错误。如果发生此类错误,则应通知用户,因为他要求应用程序执行的操作未成功。 但是,应该向用户提供多少信息?我认为我们大多数人都同意不显示堆栈跟踪(堆栈跟踪是否应该出现在向用户显示的错误消息中?),但是我找不到有关其余错误内容或向错误显示的内容的问题。用户。 例如,支持异常的语言(.net,java)具有共享的异常类型(发生异常的位置)以及与异常一起传递的澄清消息。还应该对用户隐藏吗?还是我们应该显示这个?还是应该显示一般性消息?还是应该根据潜在的异常是显示大量消息之一?

3
地址0000000C是一个特殊地址吗?
编程时有时会中断。您犯了一个错误,程序尝试从错误的地址读取。 在我眼前一亮的是,这些例外通常是: Access violation at address 012D37BC in module 'myprog.exe'. Read of address 0000000C. 现在,我看到了很多错误日志,而对我而言突出的是:0000000C。这是“特殊”地址吗?我看到了其他读取错误的访问冲突,但地址似乎是随机的,但是这种情况在完全不同的情况下会不断出现。


12
有用的错误消息会给开发人员带来什么问题?[关闭]
至今令我震惊的是,在如今的今天,由专业团队开发的至今仍在使用多年的产品一直未能提供给用户有用的错误消息。在某些情况下,仅添加少量额外信息就可以节省用户数小时的麻烦。 产生错误的程序,是有原因的。它拥有一切可用的信息,可以尽一切可能地通知用户,为什么会失败。但是,提供信息以帮助用户的优先级较低。我认为这是一个巨大的失败。 一个示例来自SQL Server。当您尝试还原正在使用的数据库时,它绝对不会让您这样做。SQL Server 知道哪些进程和应用程序正在访问它。为什么它不能包含有关正在使用数据库的进程的信息?我知道并不是每个人都Applicatio_Name在其连接字符串上传递属性,但是即使是有关所涉及机器的提示也可能会有所帮助。 另一个选择,也是SQL Server(和mySQL)是可爱的string or binary data would be truncated错误消息和等效项。很多时候,只需仔细阅读生成的SQL语句,表格就会显示出哪一列是罪魁祸首。情况并非总是如此,如果数据库引擎发现了错误,为什么它不能节省我们的时间,而只是告诉我们那是该死的列呢?在此示例中,您可能认为检查它可能会对性能造成影响,并且这会妨碍编写者。好我买 怎么样,一旦数据库引擎知道存在错误,它就会在事后快速比较要存储的值和列的长度。然后将其显示给用户。 ASP.NET的可怕表适配器也很内gui。可以执行查询,并且可以显示一条错误消息,指出某处的约束已被违反。感谢那。是时候将我的数据模型与数据库进行比较了,因为开发人员太懒了,甚至无法提供行号或示例数据。(根据记录,我从来没有使用这种数据访问方法的选择,它只是我继承了一个项目!)。 每当我从C#或C ++代码中引发异常时,我都会将手边的一切提供给用户。已经决定扔掉它,所以我可以提供的信息越多越好。为什么我的函数抛出异常?传递了什么,期望什么?我只需要一点时间就可以在异常消息的正文中添加有意义的内容。地狱,它只是帮助我,而我发展,因为我知道我的代码抛出的事情,是有意义的。 有人可能会辩称,不应将复杂的异常消息显示给用户。虽然我不同意这一点,但是根据您的构建,通过使用不同级别的冗长程度可以轻松地解决这个问题。即使这样,ASP.NET和SQL Server的用户也不是您的典型用户,他们宁愿使用充满冗长和美味信息的内容,因为他们可以更快地查找问题。 在当今时代,为什么开发人员认为可以在出现错误时提供最少量的信息呢? 这是2011人,前来上。

3
为什么C ++模板错误消息如此恐怖?
C ++模板臭名昭著,因为它会生成冗长且无法读取的错误消息。我对C ++中的模板错误消息为何如此糟糕有一个大致的了解。本质上,问题在于直到编译器遇到模板中某种类型不支持的语法时才触发错误。例如: template <class T> void dosomething(T& x) { x += 5; } 如果T不支持该+=运算符,则编译器将生成一条错误消息。而且,如果这种情况发生在某处库的深处,则错误消息可能长达数千行。 但是C ++模板本质上只是一种编译时鸭子类型的机制。C ++模板错误从概念上讲非常类似于动态语言(例如Python)中可能发生的运行时类型错误。例如,考虑以下Python代码: def dosomething(x): x.foo() 在这里,如果x没有foo()方法,Python解释器将引发异常,并显示堆栈跟踪以及非常清楚的错误消息,指出问题所在。即使直到解释器深入某个库函数内部才触发错误,运行时错误消息也仍然不像典型的C ++编译器所发出的不可读呕吐那样糟糕。那么,为什么C ++编译器无法更清楚地指出出了什么问题?为什么某些C ++模板错误消息从字面上导致我的控制台窗口滚动5秒钟以上?

9
为什么许多PHP开发人员讨厌使用isset()和/或PHP的类似防御功能(例如empty())?
在stackoverflow上,我一直看到这个问题: E_NOTICE?== E_DEBUG,避免使用更复杂的error_handler的isset()和@ 当E_NOTICE打开时,如何设置PHP不检查$ _GET的未定义索引? 如何停止PHP记录PHP通知错误 如何关闭此类PHP 5.3声明? 甚至Pekka(提供了很多可靠的PHP建议)也碰到了可怕的E_NOTICE怪物,并希望有一个比使用更好的解决方案isset():isset()和empty()使代码丑陋 就个人而言,我使用isset()并empty()在很多地方来管理我的应用程序的流量。例如: public function do_something($optional_parameter = NULL) { if (!empty($optional_parameter)) { // do optional stuff with the contents of $optional_parameter } // do mandatory stuff } 甚至像这样的简单代码段: if (!isset($_REQUEST['form_var'])) { // something's missing, do something about it. } 对我来说似乎很合逻辑。它看起来不膨胀,看起来像稳定的代码。但是,许多开发人员使用E_NOTICE启用了,从而启动了他们的应用程序,发现了许多令人沮丧的“未初始化的数组索引”通知,然后对检查已定义的变量并使用来“乱丢”其代码感到无所适从isset()。 我认为其他语言处理问题的方式也不同。从经验来看,JavaScript不像PHP那样礼貌。未定义的变量通常会停止脚本的执行。另外,(从经验上来讲)我确定像C / C …

10
为什么新程序员似乎忽略编译器错误消息/运行时异常消息?[关闭]
我认为我们都已经看到了。初学者在堆栈溢出问题上遵循基本概述... 我正在尝试做(对目标的描述非常模糊),但它不起作用/我收到错误/异常。请帮忙! 如此多的人似乎认为没有必要粘贴错误消息是不是很奇怪? 我不知道这是什么心理。错误消息是什么使人们最初认为他们没有用并且不值得关注? 我要寻找的答案不是 “他们不理解错误消息”。这并不能解释为什么他们不考虑告诉其他可能理解的人。

8
在第一个错误之后,您是否阅读C或C ++编译错误?
我从来不明白为什么C和C ++编译器会尝试从错误中恢复并继续解析。几乎总是,第一个错误会生成一系列伪错误,这些错误会在第一个错误修复后立即消失。经过几年的经验,我只是停止查看除每个文件的第一个错误以外的任何错误。我重新运行编译器,然后再次执行该操作,直到没有更多错误为止。这是常见的做法吗?

5
错误消息中的感叹号[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 您如何看待错误消息中的感叹号?即“地址无效!”。 就我个人而言,我认为它没有增加任何东西,侮辱了用户,并使产品看起来像是由12岁的人用TRS-80 BASIC编写的。

4
您如何分配错误代码?
在开发中型项目时,如何识别,创建和维护错误代码? 我一生都无法想到一种简单而干净的方法。我的一些想法将类名和方法名转换为整数字符串,但这是很长的时间,因为方法名和类名可能会更改(希望不会!)。其他人只是使用递增日志系统(即,当我创建新的错误消息时,只需在最后一个错误消息ID上加1)。但这完全是无组织的。 更具体地说,我正在谈论错误代码,例如: Error 401 Unauthorized.

3
Python-断言与if和return
我正在编写一个对文本文件执行某些操作的脚本(尽管这样做与我的问题无关)。因此,在对文件执行某些操作之前,我想检查文件是否存在。我可以做到,没问题,但是问题更多是美学问题。 这是我的代码,以两种不同的方式实现同​​一件事。 def modify_file(filename): assert os.path.isfile(filename), 'file does NOT exist.' Traceback (most recent call last): File "clean_files.py", line 15, in <module> print(clean_file('tes3t.txt')) File "clean_files.py", line 8, in clean_file assert os.path.isfile(filename), 'file does NOT exist.' AssertionError: file does NOT exist. 要么: def modify_file(filename): if not os.path.isfile(filename): return 'file does NOT exist.' …

4
在错误消息中包括指向相关文档的链接?
我们创建了一个供外部开发人员使用的商业库和代码示例。我们有(封闭的,可供注册用户使用)文档,其中广泛解释了如何使用该库。 许多开发人员是首次使用,因此会遇到很多基本错误。 在错误日志中包含指向文档的链接是否合适?可能的不利之处是什么?我可以预见一些,但似乎有可能克服以下问题 文档URL已过期 最新文档中未反映的特定于版本的错误 还有其他问题,我们通过将开发人员发送给无关的文档来浪费开发人员的时间 在我的意思示例下面,添加粗体字是个好主意吗? [错误]无法在独立项目上执行目标org.apache.maven.plugins:maven-archetype-plugin:1.2.3:generate(default-cli):所需的原型不存在(com.example.library。 archetypes:library-archetype-blank:1.2.3.0)->请参阅http://example.com/docs/setting-up-an-archetype了解更多信息和可能的故障排除
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.