2013-01-23 3 views
1

OS로 openSUSE를 사용하고 gdb 7.5를 사용합니다. 브레이크 포인트가있는 gdb로 프로그램을 디버그하고 싶습니다. 그러나 중단 점을 만들고 프로그램을 실행하면 gdb는 다음과 같이 알려줍니다.gdb에서 중단 점을 만들 수 없습니다.

Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".cpp" 

내 모든 프로그램에서 동일합니다. 또한, 중단 점을 실행하면 프로그램이 전혀 멈추지 않습니다. 어느 것이 틀린지 저에게 말할 수 있습니까?

나는 최신 GDB를 다운로드하여 설치, 이전 메시지가 사라지고 있지만, GDB를 실행할 때는 저에게 말한다 :

warning: Could not load shared library symbols for linux-gate.so.1. Do you need "set solib-search-path" or "set sysroot"? 

방법이 문제를 풀기가 있나요?

+2

어떤 명령을 사용하여 중단 점을 설정 하시겠습니까? –

+0

"b + linenumber" – yvxiang

답변

0

소스 파일 이름이 10 진수로 시작될 때 디버거가 linespec을 구문 분석하지 못하는 알려진 버그가 gdb 7.5에 있습니다. 자세한 내용은 this message을 참조하십시오.

파일의 이름을 바꾸고 gdb를 배포 저장소에서 업데이트하십시오. 버그가 계속되면 배포 관리자에게 버그를 신고하십시오.

bug report의 샘플 세션을 gdb bugzilla로 제출하십시오.

(gdb) b 3 
Breakpoint 1 at 0x4004c3: file 2.c, line 3. 
(gdb) r 
Starting program: /home/teawater/tmp/a.out 
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c" 
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c" 
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c" 
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c" 
+0

감사합니다. 파일의 이름을 바꾸려고 시도했지만 메시지가 사라지고 중단 점이 작동합니다. 고마워요. – yvxiang

+0

최신 gdb를 다운로드하고 설치하면 이전 메시지는 사라지지만 gdb를 실행하면 다음과 같이 표시됩니다. 경고 : linux-gate.so.1에 대한 공유 라이브러리 심볼을로드 할 수 없습니다. "set solib-search-path"또는 "set sysroot"가 필요합니까? 이 문제를 어떻게 해결할 수 있습니까? – yvxiang

+0

'linux-gate.so.1 '은 실제 라이브러리가 아니라 커널이 내 보낸 가상 라이브러리입니다. 64 비트 시스템과 그 후의 커널에서는'linux-vdso.so.1'로 바뀌 었습니다. libc 비 호환성과 같습니다. –

1

I use "b + linenumber"

이 전류 선에 중단 대하여 정의 ALS Specifying a Location 참조. 아래에 의견의 코드로, 다음은 작동합니다 :

(gdb) b main 
Breakpoint 1 at 0x401395: file main.cpp, line 3. 
:

$ gdb ./main 
(gdb) b +5 
Breakpoint 1 at 0x40139c: file main.cpp, line 6. 
(gdb) run 
[New Thread 1528.0x1930] 

Breakpoint 1, main() at main.cpp:5 
5   while(scanf("%d%d",&a,&b)!=EOF) 

을 상대 행 번호를 지정하는 좋은 이유가없는 한, 당신이 절대 줄 번호 또는 함수 이름을 사용하는 것이 좋습니다

(gdb) b main.cpp:6 
Breakpoint 1 at 0x40139c: file main.cpp, line 6. 
+0

답장을 보내 주셔서 감사합니다. 문제가되지 않습니다 귀하의 코드를보십시오. 그러나 사용 된 다음과 같은 간단한 코드를 고려하십시오 (내 첫번째 사용 stackoverflow) 용의자 "또한 오류 메시지를받습니다 중단 점 1 : 조작 linespec 에러! 예기치 문자열 "cpp를" #INCLUDE INT 주() { \t INT의 A, B, \t 동안 (는 scanf ("% d 개 %의 D ', A, 및 B) = EOF) \t \t의 printf ("% d 개 \ n을"A + B) \t 반환 0; } – yvxiang

+0

'처음 사용 stackoverflow'를 용서하십시오 - 문제 : 당신이 명확하게하기 위해 추가 정보가 경우를 요 UR 질문, 그것은 질문을 편집하고 코멘트 (특히 코드는 코멘트에서 읽기가 어렵습니다) 대신에 그것을 추가하는 것이 좋습니다. ** 우리가 여전히 필요로하는 것은 브레이크 포인트를 설정하기 위해 사용하는 명령입니다. ** –

관련 문제