Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux如何通过错误号获取错误描述_Linux_Ubuntu - Fatal编程技术网

Linux如何通过错误号获取错误描述

Linux如何通过错误号获取错误描述,linux,ubuntu,Linux,Ubuntu,在linux(特别是我的Ubuntu 14)中,如果某个程序因错误而终止,我可以通过$?变量获取数字错误代码 $ ./failing_app $ echo $? 然而,数字本身并不能告诉我多少,我如何获得错误名称和描述 $man errno中有一个错误列表,但它只给出名称,不给出数值 我在谷歌上搜索过,结果很奇怪:例如,我有一个玩具锈菌程序,我试图访问数组元素。程序死机,$?为101,但据说它对应于网络不可访问的错误,这没有任何意义。此链接提供了数字错误列表。希望这就是你要找的 此外,在我的系

在linux(特别是我的Ubuntu 14)中,如果某个程序因错误而终止,我可以通过
$?
变量获取数字错误代码

$ ./failing_app
$ echo $?
然而,数字本身并不能告诉我多少,我如何获得错误名称和描述

$man errno
中有一个错误列表,但它只给出名称,不给出数值


我在谷歌上搜索过,结果很奇怪:例如,我有一个玩具锈菌程序,我试图访问数组元素。程序死机,
$?
101
,但据说它对应于
网络不可访问的
错误,这没有任何意义。

此链接提供了数字错误列表。希望这就是你要找的


此外,在我的系统上,我看到文件
/usr/include/asm generic/errno base.h
包含错误的定义和错误号。这将是一个比链接更好的参考。

此链接提供了数字错误列表。希望这就是你要找的


此外,在我的系统上,我看到文件
/usr/include/asm generic/errno base.h
包含错误的定义和错误号。这将是一个比链接更好的参考。

程序的退出状态(
$?
在shell中)与C
错误无关

在C程序中,退出状态通常来自
exit
的参数或
main
的返回值。约定为0表示成功退出(对于shell为true),其他值表示失败(ir false)

但是,如果程序因接收信号而死机,外壳程序会将
$?
设置为128加上信号号。例如,在分段故障(
SIGSEGV
,即11)上,
$?
将为139


要列出信号号,我运行
kill-l

程序的退出状态(
$?
在shell中)与C
错误号无关

在C程序中,退出状态通常来自
exit
的参数或
main
的返回值。约定为0表示成功退出(对于shell为true),其他值表示失败(ir false)

但是,如果程序因接收信号而死机,外壳程序会将
$?
设置为128加上信号号。例如,在分段故障(
SIGSEGV
,即11)上,
$?
将为139


为了列出信号号,我运行了
kill-l

没有单一的中央定义权限。每个程序都为错误代码分配自己的语义。好的在手册页上有文档;例如,参见GNU的手册和手册页

Linux手册页还指出,“BSD试图标准化退出代码”。如图所示,总线实际上是一个很好的建议读数,对于有限数量的错误场景来说,它只不过是一个轻推

内核中有一组更详细、文档更完善的可能错误及其原因,但这显然仅限于系统调用,根本不解决应用程序级错误。对于Linux,请参阅


《高级Bash脚本编写指南》中有一节介绍了常见约定;——但就像ABS一般,它是标准、惯例、作者个人观点、猜测和谎言的邪恶混合物。(表中没有一个退出代码是“保留”的,即使它这样说,并且引用该表的文本强调了这一不正确的事实。)

没有单一的中央定义机构。每个程序都为错误代码分配自己的语义。好的在手册页上有文档;例如,参见GNU的手册和手册页

Linux手册页还指出,“BSD试图标准化退出代码”。如图所示,总线实际上是一个很好的建议读数,对于有限数量的错误场景来说,它只不过是一个轻推

内核中有一组更详细、文档更完善的可能错误及其原因,但这显然仅限于系统调用,根本不解决应用程序级错误。对于Linux,请参阅


《高级Bash脚本编写指南》中有一节介绍了常见约定;——但就像ABS一般,它是标准、惯例、作者个人观点、猜测和谎言的邪恶混合物。(表中没有一个退出代码是“保留”的,即使它这么说,并且引用该表的文本强调了这一不正确的事实。)

似乎
$cat/usr/include/asm generic/err*
是一个更完整的列表。然而,我可以得到errno 139的分段错误,它不在这个列表中,那么很可能是一个用户定义的错误。这似乎是因为分割错误。如果没有看到你的代码,很难说。请上传你的代码。它很简单,比如
intmain(){intx[3]={1,2,3};printf(“%i\n”,x[50000]);返回0;}
是的,这是一个分段错误。这意味着你试图访问你不应该访问的内存。在您的例子中,x是一个3的数组,但您试图访问3个元素之外的后续内存地址。因此出现了分段错误。我知道为什么会发生这种情况,我的问题是关于错误代码。类似于
$cat/usr/include/asm generic/err*
的错误代码是一个更完整的列表。然而,我可以得到errno 139的分段错误,它不在这个列表中,那么很可能是一个用户定义的错误。这似乎是因为分割错误。如果没有看到你的代码,很难说。请上传你的代码。它很简单,比如
intmain(){intx[3]={1,2,3};printf(“%i\n”,x[50000]);返回0;}
是的,这是一个分段错误。这意味着你试图访问你不应该访问的内存。在您的例子中,x是一个3的数组,但您正在尝试访问subsque