Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Установка точек останова
Для обнаружения места сбоя в программе необходимо иметь возможность проследить за тем, что делает программа во время выполнения. Остановить ее в любой момент можно с помощью точек останова. Они останавливают программу и передают управление отладчику. Вы сможете проверить переменные и затем разрешить программе продолжить выполнение.
В функции
sortiДля установки точек останова применяется ряд команд. Их перечень получен отладчиком gdb с помощью команды
help breakpoint(gdb)<b> help breakpoint</b>Making program stop at certain points.List of commands:awatch -- Set a watchpoint for an expressionbreak -- Set breakpoint at specified line or functioncatch -- Set catchpoints to catch eventsclear -- Clear breakpoint at specified line or functioncommands -- Set commands to be executed when a breakpoint is hitcondition -- Specify breakpoint number N to break only if COND is truedelete -- Delete some breakpoints or auto-display expressionsdelete breakpoints -- Delete some breakpoints or auto-display expressionsdelete checkpoint -- Delete a fork/checkpoint (experimental)delete mem -- Delete memory regiondelete tracepoints -- Delete specified tracepointsdisable -- Disable some breakpointsdisable breakpoints -- Disable some breakpointsdisable display -- Disable some expressions to be displayed when program stopsdisable mem -- Disable memory regiondisable tracepoints -- Disable specified tracepointsenable -- Enable some breakpointsenable delete -- Enable breakpoints and delete when hitenable display -- Enable some expressions to be displayed when program stopsenable mem -- Enable memory regionenable once -- Enable breakpoints for one hitenable tracepoints -- Enable specified tracepointshbreak -- Set a hardware assisted breakpointignore -- Set ignore-count of breakpoint number N to COUNTrbreak -- Set a breakpoint for all functions matching REGEXPrwatch -- Set a read watchpoint for an expressiontbreak -- Set a temporary breakpointtcatch -- Set temporary catchpoints to catch eventsthbreak -- Set a temporary hardware assisted breakpointwatch -- Set a watchpoint for an expressionType "help" followed by command name for full documentation.Type "apropos word" to search for commands related to "word".Command name abbreviations are allowed if unambiguous.Установите точку останова в строке 21 и выполните программу:
$ <b>gdb debug4</b>(gdb) <b>break 21</b>Breakpoint 1 at 0x8048427: file debug4.c, line 21.(gdb) <b>run</b>Starting program: /home/neil/BLP4e/chapter10/debug4Breakpoint 1, sort (a=0x804a040, n=5) at debug4.c:2121 /* 21 */ s = 0;Вы можете вывести значение массива и затем с помощью команды
cont(gdb)<b> print array[0]</b>$1 = (data = "bill", ' ' <repeats 4091 times>, key = 3)Для вывода нескольких последовательных элементов массива можно применить конструкцию
@<<i>число</i>>(gdb) <b>print array[0]@5</b>$2 = {{data = "bill", ' ' <repeats 4091 times>, key = 3}, { data = "neil", ' ' <repeats 4091 times>, key =4}, { data = "john", ' ' <repeats 4091 times>, key =2}, { data = "rick", ' ' <repeats 4091 times>, key =5}, { data = "alex", ' ' <repeats 4091 times>, key = 1}}Учтите, что вывод немного подчищен, чтобы его легче было читать. Поскольку это первый проход цикла, массив еще не изменен. Когда вы разрешите программе продолжить выполнение, то увидите последовательные перестройки массива array, происходящие по мере выполнения программы:
(gdb) <b>cont</b>Continuing.Breakpoint 1, sort (a=0x8049580, n=4) at debug4.c:2121 /* 21 */ s = 0;(gdb) <b>print array[0]@5</b>$3 = {{data = "bill", ' ' <repeats 4091 times>, key = 3}, {
