Clang 컴파일러는 예를 들어 다음과 같은 유용한 런타임 검사를 제공합니다. -fsanitize=unsigned-integer-overflow
. 수표 중 하나가 실패 할 때 백 트레이스를 인쇄 할 수 있습니까 (예 : gdb 사용)? 현재 문제의 정확한 위치를 알 수 있지만 컨텍스트가 없습니다. 이러한 런타임 검사, 특히 백 트레이스에서 더 많은 정보를 얻으려면 어떻게해야합니까?Clang 런타임 검사 : print backtrace
3
A
답변
1
치명적인 오류를 발생시키지 않아도되는 더 쉬운 솔루션은 env를 설정하는 것입니다. 변수 UBSAN_OPTIONS=print_stacktrace=1
.
0
프로그램은 이러한 플래그를 사용하여 중단 할 수
:
-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrap-function=abort
원인은 호출 할 중단 마지막 옵션; GDB에서 프로그램을 실행하고 프로그램이 중단 된 후 백 트레이스를 인쇄 할 수 있습니다.
소스 - answer to "Will any programs detect a buffer overflow within a C/C++ structure?"
당신이 극적으로 하나의 버그를 해결하기 위해 대기 시간이 증가함에 따라 많은 애플 리케이션을위한 매우 비효율적 일 수 있습니다 중단 사용 (각 버그 긴 감지 - 수정 재 구축 - 배포 - 테스트 사이클을 통과해야). – yugr
그러나 GDB에서 호출 스택을 중단으로 이동하고 함수를 마무리하고 신호 0을 계속 진행할 수 있습니다. 즉,이 단계에서 코드에서 많은 문제점을 발견하면 유닛 테스트, 코드 검토 및 나머지 개발 프로세스에서 문제를 찾아야 할 것입니다. –
오 그래, 개발자에게 다음 번에 전체 Linux 배포판을 위생 처리하고 결과를보고하는 작업을하십시오. – yugr