GCC标志以改进运行时错误捕获? 我最近将Linux C++应用程序移植到Windows(通过Visual Studio 2010 C++快件)。在这个过程中,我注意到Windows可执行文件往往会发现代码中的细微错误,导致程序崩溃。但同样的代码和bug在Linux/GCC中似乎没有被注意到,程序将继续愉快地运行。我在过去尝试移植的程序中见过这种行为。我的代码中的一个示例bug是编写通过1元素传递数组

GCC标志以改进运行时错误捕获? 我最近将Linux C++应用程序移植到Windows(通过Visual Studio 2010 C++快件)。在这个过程中,我注意到Windows可执行文件往往会发现代码中的细微错误,导致程序崩溃。但同样的代码和bug在Linux/GCC中似乎没有被注意到,程序将继续愉快地运行。我在过去尝试移植的程序中见过这种行为。我的代码中的一个示例bug是编写通过1元素传递数组,gcc,runtime,flags,Gcc,Runtime,Flags,我可以启用哪些标志来改进GCC中的运行时错误捕获?当我的程序遇到最轻微的运行时错误时,我希望它像Windows版本一样不稳定。或者这更多地依赖于操作系统,并且超出了用户的控制范围 我的代码中的一个示例bug是编写通过1元素传递数组 Valgrind通常很容易检测到这样的bug。我建议您在怀疑有这样的错误时,始终在Valgrind下检查代码-这将在调试过程中节省大量时间。-fstack protector all+Valgrind可能是您需要的。前者有助于减少堆栈损坏: $ cat 1.c int

我可以启用哪些标志来改进GCC中的运行时错误捕获?当我的程序遇到最轻微的运行时错误时,我希望它像Windows版本一样不稳定。或者这更多地依赖于操作系统,并且超出了用户的控制范围

我的代码中的一个示例bug是编写通过1元素传递数组


Valgrind通常很容易检测到这样的bug。我建议您在怀疑有这样的错误时,始终在Valgrind下检查代码-这将在调试过程中节省大量时间。

-fstack protector all+Valgrind可能是您需要的。前者有助于减少堆栈损坏:

$ cat 1.c
int main() {
    char data[10];
    int x;
    data[10] = 'x';
    return 0;
}
$ gcc 1.c && ./a.out    
$ gcc -fstack-protector-all 1.c && ./a.out
Abort trap

后者检查堆问题。

正是我想要的!我倾向于避免使用Valgrind,因为我没有耐心等待它找出故障。默认情况下,我的程序感觉慢了100倍。Stack-protector也带来了一定的开销,但它可能比valgrind的要不明显得多。然而,堆栈保护器本身,顾名思义,只涉及在堆栈上而不是在堆上分配的对象的问题。然而,我刚才认为您也可以使用特殊的分配器进行堆错误检查,这可能比valgrind带来的开销要少。请参阅dmalloc()和libxalloc()静态版本: