Отличная книга. Читай сам. Я полагаю, что это та часть, которую вы упускаете:
def test_cannot_add_empty_list_items(self):
# Edith goes to the home page and accidentally tries to submit
# an empty list item. She hits Enter on the empty input box
self.browser.get(self.live_server_url)
self.get_item_input_box().send_keys(Keys.ENTER)
'''
If you keep reading a little farther, it should tell you that modern browsers
will not submit forms when fields that are 'required' left are blank.
'''
# The browser intercepts the request, and does not load the
# list page
self.wait_for(lambda: self.browser.find_elements_by_css_selector(
'#id_text:invalid'
))
Если вы продолжите читать немного дальше, вам следует сказать, что «современные браузеры не будут отправлять forms
, когда поля required
не заполнено. Это должно дать вам поправку к коду выше.
Поместите свои команды gdb и точки останова в .gdbinit файле так же, как Вы могли бы ввести их в gdb> подсказка, и gdb автоматически загрузит и выполнит их на запуске. Это - файл на каталог, таким образом, у Вас могут быть различные файлы для различных проектов.
Этот ответ устарел, gdb теперь поддерживает сохранение непосредственно. См. этот ответ.
Можно использовать вход:
(gdb) b main
Breakpoint 1 at 0x8049329
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
(gdb) set logging file breaks.txt
(gdb) set logging on
Copying output to breaks.txt.
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
(gdb) q
Файл breaks.txt теперь содержит:
Num Type Disp Enb Address What
1 breakpoint keep y 0x08049329 <main+16>
Запись awk сценария, который преобразовывает это в формат, полезный для .gdbinit
или a --command
файл легок. Или можно даже заставить сценарий испустить отдельный --eval-command
к gdb командной строке...
Добавление этого маленького макроса к .gdbinit поможет Вам сделать это:
# call with dump_breaks file.txt
define dump_breaks
set logging file $arg0
set logging redirect on
set logging on
info breakpoints
set logging off
set logging redirect off
end
Проблема в том, что установка точки останова зависит от контекста. Что, если у вас есть две статические функции с именем foo? Если ты уже отлаживает один из модулей, который определяет foo, затем gdb предположит, что вы имели в виду именно это. Но если вы просто сбросите "разбить foo" в файл, а затем прочитать этот файл при запуске, не будет ясно, какую функцию foo вы имеете в виду.
Дополнение к ответу Johannes: вы можете автоматически переформатировать вывод info break
в правильный командный файл gdb:
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# reformat on-the-fly to a valid gdb command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
После этого у вас есть правильный командный файл в brestore.gdb
Это сработало для меня, когда приложение скомпилировано с -g
.
EDIT: успешно протестировано с gdb v6.8 на Ubuntu Karmic.
Расширение анонимного расширения ответа Йоханнеса:
.gdbinit:
define bsave
shell rm -f brestore.txt
set logging file brestore.txt
set logging on
info break
set logging off
# reformat on-the-fly to a valid gdb command file
shell perl -n -e 'print "break $1\n" if /^\d+.+?(\S+)$/g' brestore.txt > brestore.gdb
end
document bsave
store actual breakpoints
end
define brestore
source brestore.gdb
end
document brestore
restore breakpoints saved by bsave
end
С помощью brestore
вы можете восстановить точки останова, сохраненные с помощью bsave
.
Есть еще идеи? У меня
warning: Current output protocol does not support redirection
после
set logging on
РЕДАКТИРОВАТЬ:
Я знаю, что вопрос в том, «как сохранить список точек останова», однако я только что обнаружил, что с помощью gdb мы можем просто установить точки останова «сохраненные в файле» с помощью
gdb> source breakpoints.txt
, где breakpoints.txt - это такой файл:
break main.cpp:25
break engine.cpp:465
break wheel.cpp:57
предупреждение: протокол токового выхода не не поддерживает перенаправление
Я также получаю эту ошибку / предупреждение в GDB при попытке включить ведение журнала в режиме TUI, однако ведение журнала, похоже, работает в режиме "без TUI". Поэтому я выхожу из режима TUI всякий раз, когда хочу что-то записать. (Переключайтесь назад и вперед в режим TUI с помощью CTRL-X , CTRL-A ).
Вот как я работаю:
включить запись в журнал
- теперь он не должен жаловаться. Надеюсь, это поможет, / M: o)