2015-01-16 1 views
1

나는 과학적인 리눅스를 사용하고있다. user/project/Build 디렉토리에서 'make'를 실행하여 모든 cpp 파일을 컴파일하고 링크 한 후에 아무 문제가 없었습니다. 그런데 user/project/Build/bin/project에서 프로젝트 바이너리를 실행하는 디렉토리 user/run/run.sh로 갈 때 세그먼트 오류 오류가 발생합니다. 디렉토리 user/run에서 명령 프롬프트에 'gdb'를 입력하고 "*** 타겟이 지정되지 않았으며 makefile이 발견되지 않았습니다."라는 메시지가 나타납니다.gdb를 사용하여 sh에서 세그먼테이션 결함을 감지 하시겠습니까?

세그먼트 결함을 감지하기 위해 내가해야 할 일은 무엇입니까?

+2

sh 파일이 아닌 프로젝트에서 gdb를 사용하십시오. – tom

+0

그런 다음 명령 프롬프트를 사용하여'/ user/project/Build/bin' 디렉토리로 이동 한 다음'gdb project'를 입력 한 다음'run'을 입력하면 'libthread_db를 사용하는 스레드 디버깅이 활성화되었습니다. 코드 01. 별도의 debuginfos가 없다면 다음을 사용하십시오 : debuginfo-install glibc-2.12-1.149.el6_6.4.x86_64 libICE-1.0.6-1.el6.x86_64 ...' – user4352158

답변

3

먼저 디버그 기호를 지원하는 프로젝트를 만들어야합니다. gcc의 경우이 옵션은 -g 옵션을 사용하여 수행됩니다. 그런 다음 프로그램의 실행 파일로 gdb을 실행하십시오. 예를 들어 :

gdb ./a.out

gdb 명령 PROMT가 나타납니다. 프로그램을 시작하려면 run 명령을 실행해야합니다. 프로그램에 명령 줄 인수가 필요한 경우에도이를 지정합니다. 예 run -d firstarg -l secondarg

프로그램이 단지 bt full

이 당신에게 프로그램의 역 추적, 변수 상태와 소스 코드 라인을 줄 것이다 명령에게 gdb 프롬프트로 실행 세그먼트 오류를 ​​수신

segfault가 수신되었습니다.

+0

그러면 명령 프롬프트를 사용하여 '/ user/project/Build/bin' 디렉토리에'gdb project'를 입력하고'run'을 입력하면 'libthread_db를 사용하는 스레드 디버깅 .. 코드 01로 종료 한 프로그램.분리 된 debuginfos가 없다면 다음을 사용하십시오 : debuginfo -install glibc-2.12-1.149.el6_6.4.x86_64 libICE-1.0.6-1.el6.x86_64 ...' – user4352158

+0

GDB는 추가로 debuginfo p를 설치할 수 있다고 알려줍니다. libc 및 libICE에 대한 ackages. 흔히 필수는 아니지만 원하는 경우 설치할 수 있습니다. 종료 코드는 main이 반환하는 번호입니다. – Manos

+0

libc와 libICE를 설치하고 싶지 않은데 어떻게이 문제를 해결할 수 있습니까? – user4352158

관련 문제