반응형
GDB가 어떤 주소에 문제가 발생했는지 알려주려면 어떻게 해야 할까?
내 프로그램이 NULL 포인터 또는 오래된 메모리에 액세스하는지 알고 싶다.
역추적은 다음과 같다.
프로그램 수신 신호 SIGSEGV, Segmentation fault. [스레드 0x2b0fa4c8로 전환(LWP 1333)]/lib/libpthread.so.0의 pthread_bulx_lock()에 0xxa6ad4가 있음 (gdb) bt#0 /lib/libpthread.so.0의 pthread_virx_lock()에서 0x4a6ad4 1위 0x0058e900인치?()
GDB 7 이상에서는 다음 항목을 검사할 수 있다.$_siginfo
신호가 발생할 때 작성되고 고장 주소를 결정하는 구조:
(gdb) p $_siginfo._sifields._sigfault.si_addr
표시되면(void *) 0x0
그러면 NULL 포인터 참조가 취소된다.
GDB에서 프로그램을 실행하십시오.Seggfault가 발생하면 GDB는 변수 및 관련 주소와 함께 프로그램의 라인 및 문구를 알려준다.
GDB의 "인쇄"(p) 명령을 사용하여 변수를 검사할 수 있다.라이브러리 호출에서 충돌이 발생한 경우 "프레임" 명령어 시리즈를 사용하여 해당 스택 프레임을 볼 수 있다.
반응형
'Programing' 카테고리의 다른 글
사전 정의된 CSS 스타일을 Vue에서 생성하는 방법(각도에서 할 수 있는 것처럼) (0) | 2022.04.29 |
---|---|
Axios의 Cors OPTION 메서드가 Laravel 및 Nginx와 함께 실패함 (0) | 2022.04.29 |
TypeError: 정의되지 않은 Vuejs의 속성 'posts'를 설정할 수 없음 (0) | 2022.04.28 |
Vue JS - 하나의 구성 요소에 조건부로 정보를 표시 (0) | 2022.04.28 |
어떻게 하면 한 끈이 다른 끈을 교체하는 것으로 끝나지 않는 방식으로 두 줄을 교체할 수 있을까? (0) | 2022.04.28 |