2011-11-10 3 views
1

저는 최근에 Visual C++ Express를 통해 Windows에 Linux C++ 응용 프로그램을 포팅했습니다. 이 과정에서 나는 Windows 실행 파일이 프로그램의 충돌로 인해 코드에서 미묘한 버그를 발견하는 경향이 있음을 발견했습니다. 그러나 Linux/GCC에서 동일한 코드와 버그가 눈에 띄지 않게되어 프로그램이 계속 행복하게 실행됩니다. 이전에 이식하려고했던 프로그램에서이 동작을 보았습니다. 내 코드의 예제 버그는 1 요소로 배열을 전달하는 것입니다.런타임 오류 잡기를 개선하기위한 GCC 플래그?

GCC에서 런타임 오류 잡기를 개선하기 위해 어떤 플래그를 사용할 수 있습니까? 나는 약간의 런타임 버그를 만날 때 내 프로그램이 Windows 버전만큼 변동 적이기를 바란다. 아니면 OS에 더 의존하고 사용자의 통제를 벗어 났습니까?

+0

정적 버전 : http://stackoverflow.com/questions/8686808/is-there-any-compiler-option-in-gcc-to-check-for-memory-errors –

답변

1

내 코드의 버그 예를 하나의 요소로 배열에 전달하고 있습니다.

이와 같은 버그는 일반적으로 Valgrind에서 쉽게 발견 할 수 있습니다. Valgrind에서 항상 버그를 의심 할 때 코드를 확인하는 것이 좋습니다. 디버깅 중에 많은 시간을 절약 할 수 있습니다.

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 

후자를 확인합니다.

+0

내가 찾고있는 곳! Valgrind를 피하는 경향이 있습니다. Valgrind를 찾기 위해 인내심을 갖지 않기 때문입니다. 기본적으로 내 프로그램은 100 배 느린 것처럼 느낍니다. – Nghia

+0

Stack-Protector는 특정 오버 헤드를 부과하지만 valgrind보다 눈에 띄지 않습니다. 그러나 스택 보호기 자체는 이름에서 알 수 있듯이 힙이 아닌 스택에 할당 된 개체의 문제 만 처리합니다. 그러나 나는 방금 힙 오류 검사를 위해 특별한 할당자를 사용할지도 모른다고 생각했습니다. 이것은 valgrind보다 적은 오버 헤드를 부과 할 수 있습니다. dmalloc (http://dmalloc.com/) 및 libxalloc (http://shh.thathost.com/pub-unix/#xalloc)을 참조하십시오. –