GCC标志,以改善运行时错误捕获?

时间:2011-11-10 13:15:05

标签: gcc runtime flags

我最近将一个Linux C ++应用程序移植到Windows(通过Visual Studio 2010 C ++ express)。在这个过程中,我注意到Windows可执行文件往往会在我的代码中发现细微的错误,从而导致程序崩溃。但是相同的代码和错误似乎在Linux / GCC中没有引起注意,程序将继续快乐地运行。我在过去尝试移植的程序中看到过这种行为。我的代码中的一个示例错误是将数组传递1个元素。

我可以启用哪些标志来改善GCC中的运行时错误捕获?我希望我的程序在遇到最轻微的运行时错误时与Windows版本一样易变。或者这更多地取决于操作系统并且不受用户控制?

2 个答案:

答案 0 :(得分:1)

  

我的代码中的一个示例错误是将数组传递1个元素。

这样的错误通常很容易被Valgrind检测到。当你怀疑这样的bug时,我建议你在Valgrind下检查你的代码 - 它会在调试过程中节省大量的时间。

答案 1 :(得分:0)

-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

后者检查堆问题。