Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
6
$ <b>factorial -#t 1 2 3</b>/* Вывести трассировку вызовов функций, обратите внимание на вложенность */
| >factorial
| <factorial
1 /* Обычный вывод в stdout */
| >factorial
| | >factorial
| | <factorial /* Вывод отладки в stderr */
| <factorial
2
| >factorial
| | >factorial
| | | >factorial
| | | <factorial
| | <factorial
| <factorial
6
<?func?
$ <b>factorial -#d 1 2</b>/* Показать отладочные сообщения DBUG_PRINT() */
?func?: args: argv[2] = 1
factorial: find: find 1 factorial
factorial: result: result is 1
1
?func?: args: argv[3] = 2
factorial: find: find 2 factorial
factorial: find: find 1 factorial
factorial: result: result is 1
factorial: result: result is 2
2
Опция
-#
dbug
DBUG_PUSH()
-#
DBUG_PUSH()
getopt()
optarg
Управляющая строка состоит из набора опций и аргументов. Каждая группа опций и аргументов отделяется от других символом двоеточия. Каждая опция представлена одной буквой, а аргументы этой опции отделяются от нее запятыми. Например:
$ myprog -#d,mem,ipc:f,check_salary,check_start_date -f infile -o outfile
Опция
d
DBUG_PRINT()
mem
ipc
DBUG_PRINT()
f
check_salary()
check_start_date()
Следующий список опций и аргументов воспроизведен из руководства библиотеки
dbug
d [,ключевые слова]
Разрешает вывод от макросов с указанными ключевыми словами. Пустой список ключевых слов предполагает, что выбраны все ключевые слова.
F
Помечает каждую строку вывода отладки именем исходного файла, содержащего макрос, осуществляющий вывод.
i
Идентифицирует процесс, выводящий каждую отладочную или трассировочную строку номером ID для этого процесса.
L
Помечает каждую строку вывода отладчика номером строки исходного файла, в котором находится осуществляющий вывод макрос.
о[,файл]
Перенаправляет поток вывода отладчика в указанный файл. Потоком вывода по умолчанию является
stderr
stdout
t[,N]
Включает трассировку потока управления функций. Максимальная глубина вложения определяется
N
Для завершения нашего обсуждения вот остальные макросы, определенные библиотекой
dbug
DBUG_EXECUTE(строка, код)
Этот макрос похож на
DBUG_PRINT()
d
DBUG_EXECUTE("abort", abort());
DBUG_FILE
Это значение типа
FILE*
<stdio.h>
DBUG_LONGJMP(jmp_buf env, int val)
Этот макрос заключает в оболочку вызов
longjmp()
dbug
DBUG_POP()
Этот макрос выталкивает из стека один уровень сохраненного состояния отладки, созданный макросом
DBUG_PUSH()
DBUG_SETJMP(jmp_buf env)
Этот макрос заключает в оболочку вызов
setjmp()
dbug
В другом воплощении, в первой начинающей компании, для которой мы работали [177], мы использовали в своем продукте библиотеку
dbug
-DDBUG
Чтобы извлечь максимальную выгоду от библиотеки
dbug
awk