2013-01-23 3 views
1

Я использую openSUSE в качестве моей ОС и gdb 7.5. Я хочу отлаживать свои программы с помощью gdb с точками останова. Но когда я делаю контрольную точку, а затем запустить мою программу, GDB сообщает мне следующее:Не удалось создать контрольную точку в gdb

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

Его же во всех моих программах. Кроме того, при запуске до точки останова программа вообще не останавливается. Может ли кто-нибудь сказать мне, что случилось?

загрузить последнюю GDB и установить его, бывшее сообщение нет, но когда отлаживать он говорит мне, что:

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

как SLOVE этой проблемы?

+2

какая команда вы используете для установки точки останова? –

+0

Я использую «b + linenumber» – yvxiang

ответ

0

Известна ошибка в 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. Вам нужно «установить 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 ./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 
Breakpoint 1 at 0x401395: file main.cpp, line 3. 
(gdb) b main.cpp:6 
Breakpoint 1 at 0x40139c: file main.cpp, line 6. 
+0

Спасибо за ваш ответ. Я пробую ваш код, это не проблема. Но рассмотрим следующий простой код, который я использовал (простите мой первый, используя stackoverflow). Я также получаю сообщение «Ошибка при переустановке точки останова 1: неверно сформированный ошибка ном-строки: неожиданная строка, ".cpp" #include INT основных() { \t INT а, б; \t в то время как (зсапЕ ("% d% d", & а, & б) = EOF) \t \t Е ("% d \ п", а + б); \t возврат 0;} – yvxiang

+0

'прощаю мой первый используя stackoverflow' - не проблема :) в тех случаях, когда у вас есть дополнительная информация для уточнения лет Ур вопрос, лучше отредактировать вопрос и добавить его там, а не в комментарии (особенно код очень трудно читать в комментариях). ** Одна вещь, которая нам по-прежнему нужна, - это команда, которую вы используете для установки точки останова. ** –

Смежные вопросы