일부 네트워크 작업이 포함되어 있으며 여기에 붙여 넣을 수없는 큰 코드가 있습니다.gdb로 시작할 때 프로세스 덤프가 발생했습니다.
제가 문제가되면 gdb
으로 시작하면 프로세스가 시작 되 자마자 seg fault가 표시됩니다. 하지만 gdb없이 실행하면 계속 실행되고 임의의 시간에 오류가 발생합니다. 이유는 무엇일까요? 확실히 메모리 손상이 있습니까?
일부 네트워크 작업이 포함되어 있으며 여기에 붙여 넣을 수없는 큰 코드가 있습니다.gdb로 시작할 때 프로세스 덤프가 발생했습니다.
제가 문제가되면 gdb
으로 시작하면 프로세스가 시작 되 자마자 seg fault가 표시됩니다. 하지만 gdb없이 실행하면 계속 실행되고 임의의 시간에 오류가 발생합니다. 이유는 무엇일까요? 확실히 메모리 손상이 있습니까?
GDB에서 프로세스가 즉시 충돌 할 가능성이있는 이유 중 하나는 GDB가 주소 공간 랜덤 화를 비활성화한다는 것입니다. ASLR.
setarch x86_64 -R ./a.out ...
또는 당신과 같이 넓은 ASLR 시스템을 사용하지 않도록 설정할 수 있습니다 :
이(gdb) set disable-randomization off
(gdb) run
당신과 같이 GDB의 외부 ASLR을 해제 할 수 있습니다
당신과 같이 GDB에 ASLR을 다시 활성화 할 수 있습니다
을sudo -c "echo 0 > /proc/sys/kernel/randomize_va_space"
몇 가지 메모리 손상이 있습니까? 이자형?
확실히 어딘가에 버그가 있습니다. 메모리 손상 여부 또는 다른 버그 여부는 정확히 에 따라 다릅니다. 및 여기서 프로세스가 충돌하고 사용자에게 관련 세부 정보를 알려주지 않았습니다.
게시물에 코드를 추가하십시오. 어떤 점에서 오류가 발생했는지 알아 내려고 했습니까? – moooeeeep
가능한 이유 : 멀티 스레드 응용 프로그램에서 작업하고 스레드간에 잘못된 동기화가 발생하면 처음에는 백 트레이스를 사용하여 문제점을 디버그 한 다음 잠자기 지침을 사용하여 일부 지시 사항을 지연시켜 문제를 디버깅 할 수 있습니다. 누가 그 오류를 일으키는 지 확인하십시오. 오류 – Mouin
'valgrind'에서 같은 코드를 실행 해 보았습니까? – dlmeetei