LINUX.ORG.RU

Emacs: помогите чайнику


0

0

Добрый день! Объясните кто-нибудь, как при отладке в емаксе с помощью gdb поставить в тексте брекпоинт. Запустил M-x gdb RET ./myprog RET Понеслась моя прога. Дальше становлюсь в тексте на нужную функцию, жму C-x SPC -никакого эфф-та. Хотя в доке на емакс написано, что C-x SPC Устанавливает контрольную точку в исходной строке, где находится точка. Так все-таки, как поставить брекпоинт??? И еще. Почему если в емаксе в окне gdb нажать два раза TAB - емакс умирает навсегда?.... Просьба ногами не пинать за поцоватые вопросы :)

А ты палец с кнопки Ctrl убираешь перед тем как SPC нажать? Ясно же
написано C-X SPC. Ctrl-X и SPC без Ctrlа.

А tab в окошке отладчика - это автозавершение. Так что после того как
ты попросишь автозавершения gdb начинает перебирать все символьные 
имена в загруженной программе. А их там очень много. Так что подожди.
Чтобы сократить объем перебора попробуй ввести первые несколько 
символов того имени которое тебе надо. 
Жалко конечно что gdb не говорит что-то вроде 
"показать все 250000 имен?"
как bash.

fuxx
()
Ответ на: комментарий от fuxx

>А ты палец с кнопки Ctrl убираешь перед тем как SPC нажать? Ясно же
>написано C-X SPC. Ctrl-X и SPC без Ctrlа.
убираю ессесно.

>А tab в окошке отладчика - это автозавершение. Так что после того как
>ты попросишь автозавершения gdb начинает перебирать все символьные
>имена в загруженной программе. А их там очень много.

да, об этом не подумал. с табулятором вопрос снят.

Sergeant
() автор топика

> Понеслась моя прога. Дальше становлюсь в тексте на нужную функцию, жму C-x SPC -никакого эфф-та.

эээ. gdb обрабатывает команды пользователя только когда выполняющаяся 
программа неактивна. Так что если ты выйдешь из нее, то увидишь как уже
гораздо позже будет проставлен твой брякпойнт. А чтобы поставить 
breakpoint в нужное тебе время приостанови прогу нажатием C-c C-c, 
поставь breakpoint c-x spc и продолжи (continue). Еще можно сразу
после загрузки ставить breakpoint на main.
Успехов!

fuxx
()
Ответ на: комментарий от fuxx

>эээ. gdb обрабатывает команды пользователя только когда выполняющаяся
>программа неактивна.
аааа, вот в чем дело! а я просто привык, что вижуалстудио ставит метки когда угодно.

>А чтобы поставить
>breakpoint в нужное тебе время приостанови прогу нажатием C-c C-c,
>поставь breakpoint c-x spc и продолжи (continue). Еще можно сразу
>после загрузки ставить breakpoint на main.
вот тут интересно. когда я жму C-c C-c - имеем Debugger interrupt и моя прога завершается... Если из меню Signals выбираю BREAK - тот же эффект: вместо приостановки получаем полный останов и выход....
И все-таки, где же у него кнопка?...

Да, и еще вопрос: как установить текущую директорию? А то дебаггер регулярно ругается, мол, не могу запустить MyProgramm, потому как Current Directory is /такой-то-такой-то, вместо директории с моим проектом...

Sergeant
() автор топика
Ответ на: комментарий от Sergeant

>от тут интересно. когда я жму C-c C-c - имеем Debugger interrupt и моя
> прога завершается... Если из меню Signals выбираю BREAK - тот же 
> эффект: вместо приостановки получаем полный останов и выход....
Попробуй после остановки программы по c-c c-c ввести команду continue
в окошке отладчика.

>Да, и еще вопрос: как установить текущую директорию?
Хмм. Попробуй перед запуском отладчика вызвать dired для нужной тебе 
директории командой c-x c-f.

fuxx
()
Ответ на: комментарий от ananas

>cd и pwd в gdb прекрасно работают
Дык, до gdb дело не доходит. Он не запускается - пишет MyProgramm не найдена, current directory такой-то. И все, gdb нет.

Sergeant
() автор топика
Ответ на: комментарий от fuxx

>Попробуй после остановки программы по c-c c-c ввести команду continue >в окошке отладчика. Неа, не проходит. Current buffer has no process. То есть, гдб уже завершился, как я понимаю. Только интересно, чего это он завершается по команде BREAK?....

>Да, и еще вопрос: как установить текущую директорию? >Хмм. Попробуй перед запуском отладчика вызвать dired для нужной тебе >директории командой c-x c-f. C-x C-f у меня предлагает ввести имя файла для поиска. Пробовал пускать dired через M-x dired - да, говорит, введите имя директории. Ввожу. Но толку никакого, при запуске гдб все равно говорит - current directory такойкакбыл.

Sergeant
() автор топика
Ответ на: комментарий от fuxx

>Попробуй после остановки программы по c-c c-c ввести команду continue
>в окошке отладчика.
Неа, не проходит. Current buffer has no process.
То есть, гдб уже завершился, как я понимаю. Только интересно, чего это он завершается по команде BREAK?....

>Да, и еще вопрос: как установить текущую директорию?
>Хмм. Попробуй перед запуском отладчика вызвать dired для нужной тебе
>директории командой c-x c-f.
C-x C-f у меня предлагает ввести имя файла для поиска. Пробовал пускать dired через M-x dired - да, говорит, введите имя директории. Ввожу. Но толку никакого, при запуске гдб все равно говорит - current directory такойкакбыл.

Sergeant
() автор топика
Ответ на: комментарий от Sergeant

> Неа, не проходит. Current buffer has no process. 
Это означает что ты прибил gdb. Такое бывает в винде.
А ты, случайно, не в винде все это делаешь? У меня по
крайней мере под MinGW при нажатии Ctrl-c gdb благополучно
умирает. А в linuxе можно с непривычки случайно вместо c-c
нажать Ctrl-D в окошке отладчика. 

> C-x C-f у меня предлагает ввести имя файла для поиска.
Плевать. Введи ему не имя файла, а имя директории и все 
будет ок. Вообще если у тебя будет буфер в котором открыт
файл из нужной тебе директории, или сама директория и ты
запустишь из этого буфера gdb, то все будет ок.

fuxx
()
Ответ на: комментарий от fuxx

>Это означает что ты прибил gdb. Такое бывает в винде.
Я понимаю, что прибил :)

>А ты, случайно, не в винде все это делаешь? У меня по
>крайней мере под MinGW при нажатии Ctrl-c gdb благополучно
>умирает. А в linuxе можно с непривычки случайно вместо c-c
>нажать Ctrl-D в окошке отладчика.
Нет, это в линухе. Да и жму я именно C-c...
По шагам.
1. M-x gdb RET ./MyProgramm RET
запускается окошко с гдб, моя прога в отдельном окне. Она работает и пишет в буфер гдб всякие сообщения printf-ом.
2. Переключаюсь в буфег гдб.
3. Жму С-с С-с. Все, дебагер прибивается...
В чем дело, не пойму.....

> C-x C-f у меня предлагает ввести имя файла для поиска.
>Плевать. Введи ему не имя файла, а имя директории и все
>будет ок. Вообще если у тебя будет буфер в котором открыт
>файл из нужной тебе директории, или сама директория и ты
>запустишь из этого буфера gdb, то все будет ок.
Да, вроде так оно и есть, спасибо.

Итак, два вопроса прояснил. Остался, правда, самый важный.....

Sergeant
() автор топика
Ответ на: комментарий от Sergeant

В догонку.
Набираю в буффере гдб при работающей отлаживаемой проге
cont TAB
все, виснет намертво :(

Sergeant
() автор топика
Ответ на: комментарий от Sergeant

Чтобы сменить в Emacs текущую директорию, сделайте M+x cd Enter и введите ее имя.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.