일부 네트워크 작업이 포함되어 있으며 여기에 붙여 넣을 수없는 큰 코드가 있습니다. 제가 문제가되면 gdb으로 시작하면 프로세스가 시작 되 자마자 seg fault가 표시됩니다. 하지만 gdb없이 실행하면 계속 실행되고 임의의 시간에 오류가 발생합니다. 이유는 무엇일까요? 확실히 메모리 손상이 있습니까?
내 프로그램에서 p_meta->padding은 문자 배열입니다. gdb에서 인쇄 할 때 결과는 다음과 같습니다. (gdb) p p_meta->padding
$18 = "\037\000\000\000\332\375\024e\203\000\000\000\am\333p", '\000' <repeats 215 times>
8 진수 형식을 사용하는 것으로 보입
를 찾을 수 없습니다 내가 배열 A [10]과 다른 변수 그리고 난 당신이 실행 그래서 for(int i=0;i<20;i++) //intentionally 20
A[i]=0;
로 초기화하고 있다고 가정하자 이 라이브러리, 오류없이 배열을 초기화하고 액세스 할 수도 있지만 gdb가 다른 곳에서 코어 덤프를 제공합니다. (제 경우에는 다른 변수가
qemu와 gdb를 사용하여 리눅스 커널을 디버깅하려고합니다. 문제는 gdb가 중단 점에서 멈추지 않는다는 것입니다. 저는 kASLR이 gdb를 혼란스럽게하기 때문에 kASLR을 끄는 것이 도움이 될 수 있다는 것을 조사했습니다. - 해당 커널을 게스트에 설치하십시오. + - 커널을 게스트에 설치하고 커널 명령 줄 에 "nokaslr"을 추가하여 KASLR
KASLR이 활성화되어 있으면 심볼 파일과 실제 심볼 위치 사이에 오프셋이 있습니다. % cat /proc/kallsyms| grep '\<jiffies_64\>'
ffffffff86805000 D jiffies_64
% objdump -t /usr/lib/debug/boot/vmlinux-4.13.0-1-amd64 | grep '\<jiffies_64
GDB가 값의 서명 여부를 결정하는 방법이 궁금했습니다. 서명 된 음수 값을 eax에 저장하는 작은 프로그램을 만들었습니다. 내가 디버거를 통해 그것을 실행하고, 그 부정적인 것으로 eax에서 값을 해석 것으로 나타났습니다. 어떻게 이런가? 나는 또한 디버그 정보를 생성하지 않고 이것을 시도했다. 여기 내 짧은 프로그램이 있습니다 : section .tex
조건 구문 오류 GDB 경우 : program test
real :: x
x=12
write(*,*) x
end program test
내가 gfortran -g test.f90
로 컴파일 그럼 난 gdb를 시도 : gdb a.out
break 4 if a == 12
하지만 얻을 수 있습니다. A syntax err
나는 골란에서 완전한 초보자입니다. 사실 다른 사람의 프로그램을 디버깅하여 예기치 않은 이탈의 원인을 찾아 내고 있습니다. 프로그램이 종료되기 직전에 호출 된 "exit"루틴에서 gdb에 중단 점을 설정하는 방법을 알고 싶습니다. 대신 그냥 종료, 지금까지 gdb <program name>
run
<...wait for program to quit>
백그라운드 모드 (첨부 &)에서 프로세스에 연결 한 후 breakpoing (break)을 설정하려고합니다. 그러나 나는 가지고있다 중단 점 1을 삽입 할 수 없다. 주소 0x5560c872b71a의 메모리에 액세스 할 수 없다. 무슨 일이 일어나고있는가? 포 그라운드 모드에서 중단 점을 설정하는 것이 좋습니다. 프로그램은 C++로 작성되었습니다.
Visual Studio 2017의 통합을 사용하여 Linux 용 Windows 하위 시스템에서 로컬로 CMake Linux 응용 프로그램을 빌드하고 디버깅합니다. 응용 프로그램을 실행할 때 Visual Studio는 로컬 호스트에 대한 ssh 연결을 사용하여 cmake -DCMAKE_BUILD_TYPE="Debug" ..과 make을 실행 한 다음 gdb