2012-07-07 29 views
10

我在教自己使用gdb并运行一些随机测试。值得一提的是,我在Windows 7 x64上使用了MinGW的便携式安装。我创建了一个程序,我知道堆栈溢出的结果,当我在gdb中运行它时,首先得到两个SIGSEGV信号(没有意外),然后用代码030000000375退出(再次没有意外)。gdb:使用代码退出的程序030000000375

Program received signal SIGSEGV, Segmentation fault. 
Program received signal SIGSEGV, Segmentation fault. 
Program exited with code 030000000375. 

好奇心得到我最好的...这是什么代码?我搜索了它,发现很少。

谢谢!

更新:对于参考我试图在Ubuntu相同的程序,其结果是稍有不同:

Program received signal SIGSEGV, Segmentation fault. 
Program terminated with signal SIGSEGV, Segmentation fault. 
The program no longer exists. 
+0

你总是得到相同的代码吗?如果是这样,你有没有试过改变你的程序的数据,看看你是否仍然得到相同的代码? – Shahbaz 2012-07-08 21:49:39

回答

10

gdb打印出以八进制格式的退出代码。不明显,但由领先的0表示。

所以030000000375是十六进制的0xC00000FD,这使得代码看起来更像Windows程序员的共同点。

0xC00000FDSTATUS_STACK_OVERFLOW并且应该在ntstatus.h中定义。

+0

这是一个很好的抓住! – ArjunShankar 2012-07-09 15:00:35

+1

好找,谢谢!而且非常有趣的是,Windows实际上会告诉你什么时候出现堆栈溢出,但linux不会。 – The111 2012-07-09 16:40:00

+0

欢迎您!顺便说一句:也许你应该修改这个问题的主题为“* gdb:** Program **退出代码030000000375 *”,因为它不是'gdb'退出该代码。 @ The111 – alk 2012-07-09 16:47:04