Commit 353dd4fe authored by serg@serg.mylan's avatar serg@serg.mylan

dbug: DBUG_EXECUTE_IF macro, build user manual automatically, document all features

charset2html moved from mysys to extra
ignore: new files added, garbage removed
parent b12dfea6
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
*.lo *.lo
*.o *.o
*.reject *.reject
*.so
*.spec *.spec
*/*_pure_*warnings */*_pure_*warnings
*/.pure */.pure
...@@ -26,24 +27,18 @@ ...@@ -26,24 +27,18 @@
.out .out
.snprj/* .snprj/*
.vimrc .vimrc
50
=6
BUILD/compile-pentium-maintainer BUILD/compile-pentium-maintainer
BitKeeper/etc/config
BitKeeper/etc/csets BitKeeper/etc/csets
BitKeeper/etc/csets-in BitKeeper/etc/csets-in
BitKeeper/etc/csets-out BitKeeper/etc/csets-out
BitKeeper/etc/gone
BitKeeper/etc/level BitKeeper/etc/level
BitKeeper/etc/pushed BitKeeper/etc/pushed
BitKeeper/post-commit BitKeeper/post-commit
BitKeeper/post-commit-manual BitKeeper/post-commit-manual
BitKeeper/tmp/* BitKeeper/tmp/*
BitKeeper/tmp/bkr3sAHD
BitKeeper/tmp/gone BitKeeper/tmp/gone
COPYING COPYING
COPYING.LIB COPYING.LIB
Docs/#manual.texi#
Docs/INSTALL-BINARY Docs/INSTALL-BINARY
Docs/Images/myaccess-odbc.txt Docs/Images/myaccess-odbc.txt
Docs/Images/myaccess.txt Docs/Images/myaccess.txt
...@@ -67,7 +62,6 @@ Docs/internals_toc.html ...@@ -67,7 +62,6 @@ Docs/internals_toc.html
Docs/manual.aux Docs/manual.aux
Docs/manual.cp Docs/manual.cp
Docs/manual.cps Docs/manual.cps
Docs/manual.de.log
Docs/manual.dvi Docs/manual.dvi
Docs/manual.fn Docs/manual.fn
Docs/manual.fns Docs/manual.fns
...@@ -76,8 +70,6 @@ Docs/manual.ky ...@@ -76,8 +70,6 @@ Docs/manual.ky
Docs/manual.log Docs/manual.log
Docs/manual.pdf Docs/manual.pdf
Docs/manual.pg Docs/manual.pg
Docs/manual.texi.orig
Docs/manual.texi.rej
Docs/manual.toc Docs/manual.toc
Docs/manual.tp Docs/manual.tp
Docs/manual.txt Docs/manual.txt
...@@ -98,17 +90,11 @@ Logs/* ...@@ -98,17 +90,11 @@ Logs/*
MIRRORS MIRRORS
Makefile Makefile
Makefile.in Makefile.in
Makefile.in'
PENDING/* PENDING/*
TAGS TAGS
aclocal.m4 aclocal.m4
autom4te-2.53.cache/output.0 autom4te-2.53.cache/*
autom4te-2.53.cache/requests
autom4te-2.53.cache/traces.0
autom4te.cache/* autom4te.cache/*
autom4te.cache/output.0
autom4te.cache/requests
autom4te.cache/traces.0
bdb/README bdb/README
bdb/btree/btree_auto.c bdb/btree/btree_auto.c
bdb/build_unix/* bdb/build_unix/*
...@@ -153,13 +139,8 @@ bdb/db/crdel_auto.c ...@@ -153,13 +139,8 @@ bdb/db/crdel_auto.c
bdb/db/db_auto.c bdb/db/db_auto.c
bdb/dbinc_auto/*.* bdb/dbinc_auto/*.*
bdb/dbreg/dbreg_auto.c bdb/dbreg/dbreg_auto.c
bdb/dist/autom4te-2.53.cache/output.0 bdb/dist/autom4te-2.53.cache/*
bdb/dist/autom4te-2.53.cache/requests
bdb/dist/autom4te-2.53.cache/traces.0
bdb/dist/autom4te.cache/* bdb/dist/autom4te.cache/*
bdb/dist/autom4te.cache/output.0
bdb/dist/autom4te.cache/requests
bdb/dist/autom4te.cache/traces.0
bdb/dist/config.hin bdb/dist/config.hin
bdb/dist/configure bdb/dist/configure
bdb/dist/tags bdb/dist/tags
...@@ -238,20 +219,13 @@ bdb/test/include.tcl ...@@ -238,20 +219,13 @@ bdb/test/include.tcl
bdb/test/logtrack.list bdb/test/logtrack.list
bdb/txn/txn_auto.c bdb/txn/txn_auto.c
binary/* binary/*
bkpull.log bkpull.log*
bkpull.log.2 bkpush.log*
bkpull.log.3
bkpull.log.4
bkpull.log.5
bkpull.log.6
bkpush.log
build.log build.log
build_tags.sh build_tags.sh
client/insert_test client/insert_test
client/log_event.cc client/log_event.cc
client/log_event.h client/log_event.h
client/mf_iocache.c
client/mf_iocache.cc
client/mysql client/mysql
client/mysqladmin client/mysqladmin
client/mysqlbinlog client/mysqlbinlog
...@@ -262,11 +236,8 @@ client/mysqlmanager-pwgen ...@@ -262,11 +236,8 @@ client/mysqlmanager-pwgen
client/mysqlmanagerc client/mysqlmanagerc
client/mysqlshow client/mysqlshow
client/mysqltest client/mysqltest
client/mysys_priv.h
client/select_test client/select_test
client/ssl_test client/ssl_test
client/thimble
client/thread_test
client_test client_test
cmd-line-utils/libedit/common.h cmd-line-utils/libedit/common.h
cmd-line-utils/libedit/makelist cmd-line-utils/libedit/makelist
...@@ -279,12 +250,20 @@ config.status ...@@ -279,12 +250,20 @@ config.status
configure configure
configure.lineno configure.lineno
core core
core.2430 core.*
db-*.*.* db-*.*.*
dbug/dbug_analyze
dbug/example*.r
dbug/factorial
dbug/factorial.r
dbug/main.r
dbug/output*.r
dbug/user.ps
dbug/user.t dbug/user.t
depcomp depcomp
emacs.h emacs.h
extra/comp_err extra/comp_err
extra/charset2html
extra/my_print_defaults extra/my_print_defaults
extra/mysql_install extra/mysql_install
extra/mysql_tzinfo_to_sql extra/mysql_tzinfo_to_sql
...@@ -296,6 +275,7 @@ extra/resolveip ...@@ -296,6 +275,7 @@ extra/resolveip
extra/tztime.cc extra/tztime.cc
fcns.c fcns.c
fcns.h fcns.h
gdbinit
gmon.out gmon.out
hardcopy.0 hardcopy.0
heap/hp_test1 heap/hp_test1
...@@ -309,13 +289,8 @@ include/readline ...@@ -309,13 +289,8 @@ include/readline
include/readline/*.h include/readline/*.h
include/readline/readline.h include/readline/readline.h
include/widec.h include/widec.h
innobase/autom4te-2.53.cache/output.0 innobase/autom4te-2.53.cache/*
innobase/autom4te-2.53.cache/requests
innobase/autom4te-2.53.cache/traces.0
innobase/autom4te.cache/* innobase/autom4te.cache/*
innobase/autom4te.cache/output.0
innobase/autom4te.cache/requests
innobase/autom4te.cache/traces.0
innobase/configure.lineno innobase/configure.lineno
innobase/conftest.s1 innobase/conftest.s1
innobase/conftest.subs innobase/conftest.subs
...@@ -435,6 +410,7 @@ libmysqld/sql_db.cc ...@@ -435,6 +410,7 @@ libmysqld/sql_db.cc
libmysqld/sql_delete.cc libmysqld/sql_delete.cc
libmysqld/sql_derived.cc libmysqld/sql_derived.cc
libmysqld/sql_do.cc libmysqld/sql_do.cc
libmysqld/sql_error.cc
libmysqld/sql_handler.cc libmysqld/sql_handler.cc
libmysqld/sql_help.cc libmysqld/sql_help.cc
libmysqld/sql_insert.cc libmysqld/sql_insert.cc
...@@ -445,6 +421,7 @@ libmysqld/sql_manager.cc ...@@ -445,6 +421,7 @@ libmysqld/sql_manager.cc
libmysqld/sql_map.cc libmysqld/sql_map.cc
libmysqld/sql_olap.cc libmysqld/sql_olap.cc
libmysqld/sql_parse.cc libmysqld/sql_parse.cc
libmysqld/sql_prepare.cc
libmysqld/sql_rename.cc libmysqld/sql_rename.cc
libmysqld/sql_repl.cc libmysqld/sql_repl.cc
libmysqld/sql_select.cc libmysqld/sql_select.cc
...@@ -479,15 +456,6 @@ linked_server_sources ...@@ -479,15 +456,6 @@ linked_server_sources
linked_tools_sources linked_tools_sources
locked locked
man/*.1 man/*.1
mit-pthreads/config.flags
mit-pthreads/include/bits
mit-pthreads/include/pthread/machdep.h
mit-pthreads/include/pthread/posix.h
mit-pthreads/include/sys
mit-pthreads/machdep.c
mit-pthreads/pg++
mit-pthreads/pgcc
mit-pthreads/syscall.S
myisam/FT1.MYD myisam/FT1.MYD
myisam/FT1.MYI myisam/FT1.MYI
myisam/ft_dump myisam/ft_dump
...@@ -513,9 +481,6 @@ myisam/test1.MYD ...@@ -513,9 +481,6 @@ myisam/test1.MYD
myisam/test1.MYI myisam/test1.MYI
myisam/test2.MYD myisam/test2.MYD
myisam/test2.MYI myisam/test2.MYI
mysql-4.0.2-alpha-pc-linux-gnu-i686.tar.gz
mysql-4.0.2-alpha.tar.gz
mysql-max-4.0.2-alpha-pc-linux-gnu-i686.tar.gz
mysql-test/gmon.out mysql-test/gmon.out
mysql-test/install_test_db mysql-test/install_test_db
mysql-test/mysql-test-run mysql-test/mysql-test-run
...@@ -539,12 +504,6 @@ mysql.proj ...@@ -539,12 +504,6 @@ mysql.proj
mysql_priv.h mysql_priv.h
mysqld.S mysqld.S
mysqld.sym mysqld.sym
mysys/#mf_iocache.c#
mysys/charset2html
mysys/getopt.c
mysys/getopt1.c
mysys/main.cc
mysys/ste5KbMa
mysys/test_charset mysys/test_charset
mysys/test_dir mysys/test_dir
mysys/test_gethwaddr mysys/test_gethwaddr
...@@ -667,14 +626,6 @@ ndb/examples/ndbapi_example2/ndbapi_example2 ...@@ -667,14 +626,6 @@ ndb/examples/ndbapi_example2/ndbapi_example2
ndb/examples/ndbapi_example3/ndbapi_example3 ndb/examples/ndbapi_example3/ndbapi_example3
ndb/examples/ndbapi_example5/ndbapi_example5 ndb/examples/ndbapi_example5/ndbapi_example5
ndb/examples/select_all/select_all ndb/examples/select_all/select_all
ndb/lib/libMGM_API.so
ndb/lib/libNDB_API.so
ndb/lib/libNDB_ODBC.so
ndb/lib/libNEWTON_API.so
ndb/lib/libNEWTON_BASICTEST_COMMON.so
ndb/lib/libREP_API.so
ndb/lib/libndbclient.so
ndb/lib/libndbclient_extra.so
ndb/src/common/mgmcommon/printConfig/*.d ndb/src/common/mgmcommon/printConfig/*.d
ndb/src/cw/cpcd/ndb_cpcd ndb/src/cw/cpcd/ndb_cpcd
ndb/src/kernel/blocks/backup/restore/ndb_restore ndb/src/kernel/blocks/backup/restore/ndb_restore
...@@ -806,7 +757,6 @@ sql-bench/test-insert ...@@ -806,7 +757,6 @@ sql-bench/test-insert
sql-bench/test-select sql-bench/test-select
sql-bench/test-transactions sql-bench/test-transactions
sql-bench/test-wisconsin sql-bench/test-wisconsin
sql/.gdbinit
sql/client.c sql/client.c
sql/gen_lex_hash sql/gen_lex_hash
sql/gmon.out sql/gmon.out
...@@ -821,24 +771,12 @@ sql/mysqld ...@@ -821,24 +771,12 @@ sql/mysqld
sql/mysqld-purecov sql/mysqld-purecov
sql/mysqld-purify sql/mysqld-purify
sql/mysqld-quantify sql/mysqld-quantify
sql/new.cc
sql/pack.c sql/pack.c
sql/safe_to_cache_query.txt
sql/share/*.sys sql/share/*.sys
sql/share/charsets/gmon.out
sql/share/gmon.out
sql/share/mysql
sql/share/norwegian-ny/errmsg.sys
sql/share/norwegian/errmsg.sys
sql/sql_select.cc.orig
sql/sql_yacc.cc sql/sql_yacc.cc
sql/sql_yacc.h sql/sql_yacc.h
sql/sql_yacc.output sql/sql_yacc.output
sql/sql_yacc.yy.orig
sql/test_time sql/test_time
sql/udf_example.so
sql_error.cc
sql_prepare.cc
stamp-h stamp-h
stamp-h.in stamp-h.in
stamp-h1 stamp-h1
...@@ -930,10 +868,8 @@ tests/client_test ...@@ -930,10 +868,8 @@ tests/client_test
tests/connect_test tests/connect_test
thread_test thread_test
tmp/* tmp/*
tools/my_vsnprintf.c
tools/mysqlmanager tools/mysqlmanager
tools/mysqlmngd tools/mysqlmngd
tools/mysys_priv.h
vi.h vi.h
vio/test-ssl vio/test-ssl
vio/test-sslclient vio/test-sslclient
......
...@@ -2861,12 +2861,10 @@ then ...@@ -2861,12 +2861,10 @@ then
AC_DEFINE([THREAD], [1], AC_DEFINE([THREAD], [1],
[Define if you want to have threaded code. This may be undef on client code]) [Define if you want to have threaded code. This may be undef on client code])
# Avoid _PROGRAMS names # Avoid _PROGRAMS names
THREAD_LPROGRAMS="test_thr_alarm\$(EXEEXT) test_thr_lock\$(EXEEXT)"
AC_SUBST(THREAD_LPROGRAMS)
THREAD_LOBJECTS="thr_alarm.o thr_lock.o thr_mutex.o thr_rwlock.o my_pthread.o my_thr_init.o" THREAD_LOBJECTS="thr_alarm.o thr_lock.o thr_mutex.o thr_rwlock.o my_pthread.o my_thr_init.o"
AC_SUBST(THREAD_LOBJECTS) AC_SUBST(THREAD_LOBJECTS)
server_scripts="mysqld_safe mysql_install_db" server_scripts="mysqld_safe mysql_install_db"
sql_server_dirs="strings dbug mysys extra regex" sql_server_dirs="strings mysys dbug extra regex"
# #
......
...@@ -16,42 +16,51 @@ ...@@ -16,42 +16,51 @@
# MA 02111-1307, USA # MA 02111-1307, USA
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include
LDADD = libdbug.a ../strings/libmystrings.a LDADD = libdbug.a ../mysys/libmysys.a ../strings/libmystrings.a
pkglib_LIBRARIES = libdbug.a pkglib_LIBRARIES = libdbug.a
noinst_HEADERS = dbug_long.h noinst_HEADERS = dbug_long.h
libdbug_a_SOURCES = dbug.c sanity.c libdbug_a_SOURCES = dbug.c sanity.c
EXTRA_DIST = example1.c example2.c example3.c \ EXTRA_DIST = example1.c example2.c example3.c \
user.r monty.doc readme.prof \ user.r monty.doc readme.prof dbug_add_tags.pl \
main.c factorial.c dbug_analyze.c main.c factorial.c dbug_analyze.c
NROFF_INC = example1.r example2.r example3.r main.r \
factorial.r output1.r output2.r output3.r \
output4.r output5.r
# Must be linked with libs that are not compiled yet
extra_progs: factorial dbug_analyze
factorial: main.o factorial.o # Must be linked with libs that are not compiled yet
@rm -f factorial noinst_PROGRAMS = factorial dbug_analyze
$(LINK) main.o factorial.o -lmysys factorial_SOURCES = main.c factorial.c
dbug_analyze_SOURCES = dbug_analyze.c
dbug_analyze: dbug_analyze.o all: user.t user.ps
@rm -f dbug_analyze
$(LINK) dbug_analyze.o -lmysys
user.t: user.r $(NROFF_INC) user.t: user.r $(NROFF_INC)
nroff -cm user.r > $@ nroff -mm user.r > $@
user.ps: user.r $(NROFF_INC)
groff -mm user.r > $@
output1.r: factorial
./factorial 1 2 3 4 5 | cat > $@
output1.r: $(PROGRAM) output2.r: factorial
factorial 1 2 3 4 5 | cat > $@ ./factorial -\#t:o 2 3 | cat >$@
output2.r: $(PROGRAM) output3.r: factorial
factorial -\#t:o 2 3 | cat >$@ ./factorial -\#d:t:o 3 | cat >$@
output3.r: $(PROGRAM) output4.r: factorial
factorial -\#d:t:o 3 | cat >$@ ./factorial -\#d,result:o 4 | cat >$@
output4.r: $(PROGRAM) output5.r: factorial
factorial -\#d,result:o 4 | cat >$@ ./factorial -\#d:f,factorial:F:L:o 3 | cat >$@
.c.r:
@RM@ -f $@
@SED@ -e 's!\\!\\\\!g' $< > $@
output5.r: $(PROGRAM) clean:
factorial -\#d:f,factorial:F:L:o 3 | cat >$@ @RM@ -f $(NROFF_INC) user.t user.ps
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
...@@ -21,8 +21,7 @@ ...@@ -21,8 +21,7 @@
* all copies and derivative works. Thank you. * * all copies and derivative works. Thank you. *
* * * *
* The author makes no warranty of any kind with respect to this * * The author makes no warranty of any kind with respect to this *
* product and explicitly disclaims any implied warranties of mer- *ct_lex.table_list.first=0; * product and explicitly disclaims any implied warranties of mer- *
thd->lex.selec
* chantability or fitness for any particular purpose. * * chantability or fitness for any particular purpose. *
* * * *
****************************************************************************** ******************************************************************************
...@@ -60,8 +59,8 @@ ...@@ -60,8 +59,8 @@
* *
* Michael Widenius: * Michael Widenius:
* DBUG_DUMP - To dump a block of memory. * DBUG_DUMP - To dump a block of memory.
* PUSH_FLAG "O" - To be used insted of "o" if we don't * PUSH_FLAG "O" - To be used insted of "o" if we
* want flushing (for slow systems) * want flushing after each write
* PUSH_FLAG "A" - as 'O', but we will append to the out file instead * PUSH_FLAG "A" - as 'O', but we will append to the out file instead
* of creating a new one. * of creating a new one.
* Check of malloc on entry/exit (option "S") * Check of malloc on entry/exit (option "S")
...@@ -930,7 +929,7 @@ void _db_doprnt_ (const char *format,...) ...@@ -930,7 +929,7 @@ void _db_doprnt_ (const char *format,...)
/* /*
* FUNCTION * FUNCTION
* *
* _db_dump_ dump a string until '\0' is found * _db_dump_ dump a string in hex
* *
* SYNOPSIS * SYNOPSIS
* *
...@@ -1204,6 +1203,33 @@ static BOOLEAN DoProfile () ...@@ -1204,6 +1203,33 @@ static BOOLEAN DoProfile ()
} }
#endif #endif
/*
* FUNCTION
*
* _db_strict_keyword_ test keyword for member of keyword list
*
* SYNOPSIS
*
* BOOLEAN _db_strict_keyword_ (keyword)
* char *keyword;
*
* DESCRIPTION
*
* Similar to _db_keyword_, but keyword is NOT accepted if keyword list
* is empty. Used in DBUG_EXECUTE_IF() - for actions that must not be
* executed by default.
*
* Returns TRUE if keyword accepted, FALSE otherwise.
*
*/
BOOLEAN _db_strict_keyword_ (
const char *keyword)
{
if (stack -> keywords == NULL)
return FALSE;
return _db_keyword_ (keyword);
}
/* /*
* FUNCTION * FUNCTION
......
...@@ -572,6 +572,11 @@ int main (int argc, char **argv) ...@@ -572,6 +572,11 @@ int main (int argc, char **argv)
FILE *infile; FILE *infile;
FILE *outfile = {stdout}; FILE *outfile = {stdout};
#if defined(HAVE_PTHREAD_INIT) && defined(THREAD)
pthread_init(); /* Must be called before DBUG_ENTER */
#endif
my_thread_global_init();
{
DBUG_ENTER ("main"); DBUG_ENTER ("main");
DBUG_PROCESS (argv[0]); DBUG_PROCESS (argv[0]);
my_name = argv[0]; my_name = argv[0];
...@@ -601,6 +606,7 @@ int main (int argc, char **argv) ...@@ -601,6 +606,7 @@ int main (int argc, char **argv)
output (outfile); output (outfile);
DBUG_RETURN (EX_OK); DBUG_RETURN (EX_OK);
} }
}
#ifdef MSDOS #ifdef MSDOS
......
#error This file is not used in MySQL - see ../include/my_dbug.h instead
/****************************************************************************** /******************************************************************************
* * * *
* N O T I C E * * N O T I C E *
......
...@@ -13,6 +13,7 @@ char *argv[]; ...@@ -13,6 +13,7 @@ char *argv[];
#if defined(HAVE_PTHREAD_INIT) && defined(THREAD) #if defined(HAVE_PTHREAD_INIT) && defined(THREAD)
pthread_init(); /* Must be called before DBUG_ENTER */ pthread_init(); /* Must be called before DBUG_ENTER */
#endif #endif
my_thread_global_init();
{ {
DBUG_ENTER ("main"); DBUG_ENTER ("main");
DBUG_PROCESS (argv[0]); DBUG_PROCESS (argv[0]);
......
.\" @(#)user.r 1.13 10/29/86 .\" @(#)user.r 1.13 10/29/86
.\" .\"
.\" 2004-10-29: documented features implemented since 10/29/86
.\" formatting cleanup
.\" - Sergei Golubchik
.\"
.\" DBUG (Macro Debugger Package) nroff source .\" DBUG (Macro Debugger Package) nroff source
.\" .\"
.\" nroff -mm user.r >user.t .\" nroff -mm user.r >user.t
.\" groff -mm user.r >user.ps
.\" .\"
.\" =================================================== .\" ===================================================
.\" .\"
...@@ -196,7 +201,9 @@ Figure 1 is an example of this type of primitive debugging ...@@ -196,7 +201,9 @@ Figure 1 is an example of this type of primitive debugging
technique. technique.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so example1.r .so example1.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
...@@ -222,7 +229,9 @@ C preprocessor. ...@@ -222,7 +229,9 @@ C preprocessor.
Figure 2 is an example of all three techniques. Figure 2 is an example of all three techniques.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so example2.r .so example2.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
...@@ -255,7 +264,9 @@ like an arbitrary and unreasonable restriction. ...@@ -255,7 +264,9 @@ like an arbitrary and unreasonable restriction.
Figure 3 is an example of this usage. Figure 3 is an example of this usage.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so example3.r .so example3.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
...@@ -281,7 +292,9 @@ program is implemented recursively. ...@@ -281,7 +292,9 @@ program is implemented recursively.
Figure 4 is the main function for this factorial program. Figure 4 is the main function for this factorial program.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so main.r .so main.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
...@@ -346,7 +359,7 @@ All of these macros will be fully explained in subsequent sections. ...@@ -346,7 +359,7 @@ All of these macros will be fully explained in subsequent sections.
To use the debugger, the factorial program is invoked with a command To use the debugger, the factorial program is invoked with a command
line of the form: line of the form:
.DS CB N .DS CB N
factorial -#d:t 1 2 3 \fCfactorial -#d:t 1 2 3
.DE .DE
The The
.B main .B main
...@@ -373,6 +386,7 @@ by an optional comma separated list of arguments specific ...@@ -373,6 +386,7 @@ by an optional comma separated list of arguments specific
to the given flag. to the given flag.
Some examples are: Some examples are:
.DS CB N .DS CB N
\fC
-#d:t:o -#d:t:o
-#d,in,out:f,main:F:L -#d,in,out:f,main:F:L
.DE .DE
...@@ -391,7 +405,9 @@ Note that this is not necessarily the best way to do factorials ...@@ -391,7 +405,9 @@ Note that this is not necessarily the best way to do factorials
and error conditions are ignored completely. and error conditions are ignored completely.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so factorial.r .so factorial.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
...@@ -421,7 +437,7 @@ To build the factorial program on a ...@@ -421,7 +437,7 @@ To build the factorial program on a
system, compile and system, compile and
link with the command: link with the command:
.DS CB N .DS CB N
cc -o factorial main.c factorial.c -ldbug \fCcc -o factorial main.c factorial.c -ldbug
.DE .DE
The "-ldbug" argument tells the loader to link in the The "-ldbug" argument tells the loader to link in the
runtime support modules for the runtime support modules for the
...@@ -429,18 +445,20 @@ runtime support modules for the ...@@ -429,18 +445,20 @@ runtime support modules for the
package. package.
Executing the factorial program with a command of the form: Executing the factorial program with a command of the form:
.DS CB N .DS CB N
factorial 1 2 3 4 5 \fCfactorial 1 2 3 4 5
.DE .DE
generates the output shown in figure 6. generates the output shown in figure 6.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so output1.r .so output1.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
Figure 6 Figure 6
.ce .ce
factorial 1 2 3 4 5 \fCfactorial 1 2 3 4 5
.ll +5 .ll +5
.SP 2 .SP 2
.DE .DE
...@@ -449,16 +467,18 @@ factorial 1 2 3 4 5 ...@@ -449,16 +467,18 @@ factorial 1 2 3 4 5
Function level tracing is enabled by passing the debugger Function level tracing is enabled by passing the debugger
the 't' flag in the debug control string. the 't' flag in the debug control string.
Figure 7 is the output resulting from the command Figure 7 is the output resulting from the command
"factorial\ -#t:o\ 3\ 2". "factorial\ -#t:o\ 2\ 3".
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so output2.r .so output2.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
Figure 7 Figure 7
.ce .ce
factorial -#t:o 3 2 \fCfactorial -#t:o 2 3
.ll +5 .ll +5
.SP 2 .SP 2
.DE .DE
...@@ -510,7 +530,7 @@ output instead, via the 'o' flag character. ...@@ -510,7 +530,7 @@ output instead, via the 'o' flag character.
Note that no 'o' implies the default (standard error), a 'o' Note that no 'o' implies the default (standard error), a 'o'
with no arguments means standard output, and a 'o' with no arguments means standard output, and a 'o'
with an argument means used the named file. with an argument means used the named file.
I.E, "factorial\ -#t:o,logfile\ 3\ 2" would write the trace i.e, "factorial\ -#t:o,logfile\ 3\ 2" would write the trace
output in "logfile". output in "logfile".
Because of Because of
.B UNIX .B UNIX
...@@ -566,13 +586,15 @@ to a single macro with a huge format string. ...@@ -566,13 +586,15 @@ to a single macro with a huge format string.
Figure 8 shows the output for default tracing and debug. Figure 8 shows the output for default tracing and debug.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so output3.r .so output3.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
Figure 8 Figure 8
.ce .ce
factorial -#d:t:o 3 \fCfactorial -#d:t:o 3
.ll +5 .ll +5
.SP 2 .SP 2
.DE .DE
...@@ -591,13 +613,15 @@ To demonstrate selection of specific macros for output, figure ...@@ -591,13 +613,15 @@ To demonstrate selection of specific macros for output, figure
the debug control string "-#d,result:o". the debug control string "-#d,result:o".
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so output4.r .so output4.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
Figure 9 Figure 9
.ce .ce
factorial -#d,result:o 4 \fCfactorial -#d,result:o 4
.ll +5 .ll +5
.SP 2 .SP 2
.DE .DE
...@@ -613,13 +637,15 @@ The 'F' flag enables printing of the source file name and the 'L' ...@@ -613,13 +637,15 @@ The 'F' flag enables printing of the source file name and the 'L'
flag enables printing of the source file line number. flag enables printing of the source file line number.
.DS I N .DS I N
.SP 2 .SP 2
\fC
.so output5.r .so output5.r
\fR
.SP 2 .SP 2
.ll -5 .ll -5
.ce .ce
Figure 10 Figure 10
.ce .ce
factorial -#d:f,factorial:F:L:o 3 \fCfactorial -#d:f,factorial:F:L:o 3
.ll +5 .ll +5
.SP 2 .SP 2
.DE .DE
...@@ -671,7 +697,7 @@ will cause warning messages from the ...@@ -671,7 +697,7 @@ will cause warning messages from the
.I dbug .I dbug
package runtime support module. package runtime support module.
.SP 1 .SP 1
EX:\ DBUG_ENTER\ ("main"); EX:\ \fCDBUG_ENTER\ ("main");\fR
.SP 1 .SP 1
.LI DBUG_RETURN\ .LI DBUG_RETURN\
Used at each exit point of a function containing a Used at each exit point of a function containing a
...@@ -693,16 +719,16 @@ DBUG_ENTER ...@@ -693,16 +719,16 @@ DBUG_ENTER
macro, and the compiler will complain macro, and the compiler will complain
if the macros are actually used (expanded). if the macros are actually used (expanded).
.SP 1 .SP 1
EX:\ DBUG_RETURN\ (value); EX:\ \fCDBUG_RETURN\ (value);\fR
.br .br
EX:\ DBUG_VOID_RETURN; EX:\ \fCDBUG_VOID_RETURN;\fR
.SP 1 .SP 1
.LI DBUG_PROCESS\ .LI DBUG_PROCESS\
Used to name the current process being executed. Used to name the current process being executed.
A typical argument for this macro is "argv[0]", though A typical argument for this macro is "argv[0]", though
it will be perfectly happy with any other string. it will be perfectly happy with any other string.
.SP 1 .SP 1
EX:\ DBUG_PROCESS\ (argv[0]); EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
.SP 1 .SP 1
.LI DBUG_PUSH\ .LI DBUG_PUSH\
Sets a new debugger state by pushing the current Sets a new debugger state by pushing the current
...@@ -720,11 +746,11 @@ The proper usage is to pass a pointer to the first character ...@@ -720,11 +746,11 @@ The proper usage is to pass a pointer to the first character
.B after .B after
the "-#" string. the "-#" string.
.SP 1 .SP 1
EX:\ DBUG_PUSH\ (\&(argv[i][2])); EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
.br .br
EX:\ DBUG_PUSH\ ("d:t"); EX:\ \fCDBUG_PUSH\ ("d:t");\fR
.br .br
EX:\ DBUG_PUSH\ (""); EX:\ \fCDBUG_PUSH\ ("");\fR
.SP 1 .SP 1
.LI DBUG_POP\ .LI DBUG_POP\
Restores the previous debugger state by popping the state stack. Restores the previous debugger state by popping the state stack.
...@@ -734,7 +760,7 @@ The ...@@ -734,7 +760,7 @@ The
DBUG_POP DBUG_POP
macro has no arguments. macro has no arguments.
.SP 1 .SP 1
EX:\ DBUG_POP\ (); EX:\ \fCDBUG_POP\ ();\fR
.SP 1 .SP 1
.LI DBUG_FILE\ .LI DBUG_FILE\
The The
...@@ -744,7 +770,7 @@ stream. ...@@ -744,7 +770,7 @@ stream.
It is used in the same manner as the symbols "stdout" and "stderr" It is used in the same manner as the symbols "stdout" and "stderr"
in the standard I/O package. in the standard I/O package.
.SP 1 .SP 1
EX:\ fprintf\ (DBUG_FILE,\ "Doing my own I/O!\n"); EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
.SP 1 .SP 1
.LI DBUG_EXECUTE\ .LI DBUG_EXECUTE\
The DBUG_EXECUTE macro is used to execute any arbitrary C code. The DBUG_EXECUTE macro is used to execute any arbitrary C code.
...@@ -754,9 +780,19 @@ This macro must be used cautiously because, like the ...@@ -754,9 +780,19 @@ This macro must be used cautiously because, like the
DBUG_PRINT DBUG_PRINT
macro, macro,
it is automatically selected by default whenever the 'd' flag has it is automatically selected by default whenever the 'd' flag has
no argument list (I.E., a "-#d:t" control string). no argument list (i.e., a "-#d:t" control string).
.SP 1
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
.SP 1
.LI DBUG_EXECUTE_IF\
Works like DBUG_EXECUTE macro, but the code is
.B not
executed "by default", if the keyword is not explicitly listed in
the 'd' flag. Used to conditionally execute "dangerous" actions, e.g
to crash the program testing how recovery works, or to introduce an
artificial delay checking for race conditions.
.SP 1 .SP 1
EX:\ DBUG_EXECUTE\ ("abort",\ abort\ ()); EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
.SP 1 .SP 1
.LI DBUG_N\ .LI DBUG_N\
These macros, where N is in the range 2-5, are currently obsolete These macros, where N is in the range 2-5, are currently obsolete
...@@ -773,11 +809,20 @@ and ...@@ -773,11 +809,20 @@ and
.B must .B must
be enclosed in parenthesis. be enclosed in parenthesis.
.SP 1 .SP 1
EX:\ DBUG_PRINT\ ("eof",\ ("end\ of\ file\ found")); EX:\ \fCDBUG_PRINT\ ("eof",\ ("end\ of\ file\ found"));\fR
.br .br
EX:\ DBUG_PRINT\ ("type",\ ("type\ is\ %x", type)); EX:\ \fCDBUG_PRINT\ ("type",\ ("type\ is\ %x", type));\fR
.br .br
EX:\ DBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name)); EX:\ \fCDBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name));\fR
.SP 1
.LI DBUG_DUMP\
Used to dump a memory block in hex via the "fprintf" library function on the
current debug stream, DBUG_FILE.
The first argument is a debug keyword, the second is a pointer to
a memory to dump, the third is a number of bytes to dump.
.SP 1
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
.SP 1
.LI DBUG_SETJMP\ .LI DBUG_SETJMP\
Used in place of the setjmp() function to first save the current Used in place of the setjmp() function to first save the current
debugger state and then execute the standard setjmp call. debugger state and then execute the standard setjmp call.
...@@ -786,7 +831,8 @@ DBUG_LONGJMP macro is used to invoke the standard longjmp() call. ...@@ -786,7 +831,8 @@ DBUG_LONGJMP macro is used to invoke the standard longjmp() call.
Currently all instances of DBUG_SETJMP must occur within the Currently all instances of DBUG_SETJMP must occur within the
same function and at the same function nesting level. same function and at the same function nesting level.
.SP 1 .SP 1
EX:\ DBUG_SETJMP\ (env); EX: \fCDBUG_SETJMP\ (env);\fR
.SP 1
.LI DBUG_LONGJMP\ .LI DBUG_LONGJMP\
Used in place of the longjmp() function to first restore the Used in place of the longjmp() function to first restore the
previous debugger state at the time of the last DBUG_SETJMP previous debugger state at the time of the last DBUG_SETJMP
...@@ -797,7 +843,38 @@ It would be possible to maintain separate DBUG_SETJMP and DBUG_LONGJMP ...@@ -797,7 +843,38 @@ It would be possible to maintain separate DBUG_SETJMP and DBUG_LONGJMP
pairs by having the debugger runtime support module use the first pairs by having the debugger runtime support module use the first
argument to differentiate the pairs. argument to differentiate the pairs.
.SP 1 .SP 1
EX:\ DBUG_LONGJMP\ (env,val); EX: \fCDBUG_LONGJMP\ (env,val);\fR
.SP 1
.LI DBUG_LOCK_FILE\
Used in multi-threaded environment to lock DBUG_FILE stream.
It can be used, for example, in functions that need to write something to a
debug stream more than in one fprintf() call and want to ensure that no other
thread will write something in between.
.SP 1
EX:\fC
.br
DBUG_LOCK_FILE;
.br
fprintf (DBUG_FILE, "a=[");
.br
for (int i=0; i < a_length; i++)
.br
fprintf (DBUG_FILE, "0x%03x ", a[i]);
.br
fprintf (DBUG_FILE, "]");
.br
DBUG_UNLOCK_FILE;\fR
.SP 1
.LI DBUG_UNLOCK_FILE\
Unlocks DBUG_FILE stream, that was locked with a DBUG_LOCK_FILE.
.LI DBUG_ASSERT\
This macro just does a regular assert(). The difference is that it will be
disabled by DBUG_OFF togeher with the
.I dbug
library. So there will be no need to disable asserts separately with NDEBUG.
.SP 1
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0);\fR
.SP 1
.LE .LE
.SK .SK
...@@ -815,6 +892,16 @@ and the flag characters which enable or disable them. ...@@ -815,6 +892,16 @@ and the flag characters which enable or disable them.
Argument lists enclosed in '[' and ']' are optional. Argument lists enclosed in '[' and ']' are optional.
.SP 2 .SP 2
.BL 22 .BL 22
.LI a[,file]
Redirect the debugger output stream and append it to the specified file.
The default output stream is stderr.
A null argument list causes output to be redirected to stdout.
Double the colon, if you want it in the path
.SP 1
EX: \fCa,C::\\tmp\\log\fR
.LI A[,file]
Like 'a[,file]' but close and reopen file after each write. It helps to get
a complete log file in case of crashes.
.LI d[,keywords] .LI d[,keywords]
Enable output from macros with specified keywords. Enable output from macros with specified keywords.
A null list of keywords implies that all keywords are selected. A null list of keywords implies that all keywords are selected.
...@@ -828,6 +915,14 @@ A null list of functions implies that all functions are selected. ...@@ -828,6 +915,14 @@ A null list of functions implies that all functions are selected.
.LI F .LI F
Mark each debugger output line with the name of the source file Mark each debugger output line with the name of the source file
containing the macro causing the output. containing the macro causing the output.
.LI i
Mark each debugger output line with the PID of the current process.
.LI g,[functions]
Enable profiling for the specified list of functions.
By default profiling is enabled for all functions.
See
.B PROFILING\ WITH\ DBUG
below.
.LI L .LI L
Mark each debugger output line with the source file line number of Mark each debugger output line with the source file line number of
the macro causing the output. the macro causing the output.
...@@ -838,9 +933,9 @@ Sequentially number each debugger output line starting at 1. ...@@ -838,9 +933,9 @@ Sequentially number each debugger output line starting at 1.
This is useful for reference purposes when debugger output is This is useful for reference purposes when debugger output is
interspersed with program output. interspersed with program output.
.LI o[,file] .LI o[,file]
Redirect the debugger output stream to the specified file. Like 'a[,file]' but overwrite old file, do not append.
The default output stream is stderr. .LI O[,file]
A null argument list causes output to be redirected to stdout. Like 'A[,file]' but overwrite old file, do not append.
.LI p[,processes] .LI p[,processes]
Limit debugger actions to the specified processes. Limit debugger actions to the specified processes.
A null list implies all processes. A null list implies all processes.
...@@ -865,11 +960,89 @@ Most useful with ...@@ -865,11 +960,89 @@ Most useful with
.B DBUG_PUSH .B DBUG_PUSH
macros used to temporarily alter the macros used to temporarily alter the
debugger state. debugger state.
.LI S
When compiled with
.I safemalloc
this flag forces "sanity" memory checks (for overwrites/underwrites)
on each
.B DBUG_ENTER
and
.B DBUG_RETURN.
.LI t[,N] .LI t[,N]
Enable function control flow tracing. Enable function control flow tracing.
The maximum nesting depth is specified by N, and defaults to The maximum nesting depth is specified by N, and defaults to
200. 200.
.LE .LE
.SK
.B
PROFILING WITH DBUG
.R
.P
With
.I dbug
one can do profiling in a machine independent fashion,
without a need for profiled version of system libraries.
For this,
.I dbug
can write out a file
called
.B dbugmon.out
(by default). This is an ascii file containing lines of the form:
.DS CB N
\fC<function-name> E <time-entered>
<function-name> X <time-exited>
.DE
.P
A second program (\fBanalyze\fR) reads this file, and produces a report on
standard output.
.P
Profiling is enabled through the
.B g
flag. It can take a list of
function names for which profiling is enabled. By default, it
profiles all functions.
.P
The profile file is opened for appending. This
is in order that one can run a program several times, and get the
sum total of all the times, etc.
.P
An example of the report generated follows:
.DS CB N
\fC
Profile of Execution
Execution times are in milliseconds
Calls Time
----- ----
Times Percentage Time Spent Percentage
Function Called of total in Function of total Importance
======== ====== ========== =========== ========== ==========
factorial 5 83.33 30 100.00 8333
main 1 16.67 0 0.00 0
======== ====== ========== =========== ==========
Totals 6 100.00 30 100.00
.DE
.P
As you can see, it's quite self-evident. The
.B Importance
column is a
metric obtained by multiplying the percentage of the calls and the percentage
of the time. Functions with higher 'importance' benefit the most from
being sped up.
.P
As a limitation - setjmp/longjmp, or child processes, are ignored
for the time being. Also, profiling does not work
in a multi-threaded environment.
.P
Profiling code is (c) Binayak Banerjee.
.SK .SK
.B .B
HINTS AND MISCELLANEOUS HINTS AND MISCELLANEOUS
...@@ -934,4 +1107,4 @@ The most common problem is multiply allocated memory. ...@@ -934,4 +1107,4 @@ The most common problem is multiply allocated memory.
.\" .DE nroff dident like this. davida 900108 .\" .DE nroff dident like this. davida 900108
.CS .CS
.\" vim:filetype=nroff
...@@ -20,6 +20,7 @@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a \ ...@@ -20,6 +20,7 @@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a \
../dbug/libdbug.a ../strings/libmystrings.a ../dbug/libdbug.a ../strings/libmystrings.a
bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \ bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \
resolve_stack_dump mysql_waitpid resolve_stack_dump mysql_waitpid
noinst_PROGRAMS = charset2html
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
...@@ -25,6 +25,7 @@ extern int _db_on_,_no_db_; ...@@ -25,6 +25,7 @@ extern int _db_on_,_no_db_;
extern FILE *_db_fp_; extern FILE *_db_fp_;
extern char *_db_process_; extern char *_db_process_;
extern int _db_keyword_(const char *keyword); extern int _db_keyword_(const char *keyword);
extern int _db_strict_keyword_(const char *keyword);
extern void _db_setjmp_(void); extern void _db_setjmp_(void);
extern void _db_longjmp_(void); extern void _db_longjmp_(void);
extern void _db_push_(const char *control); extern void _db_push_(const char *control);
...@@ -67,12 +68,15 @@ extern void _db_unlock_file(); ...@@ -67,12 +68,15 @@ extern void _db_unlock_file();
#define DBUG_LOCK_FILE { _db_lock_file(); } #define DBUG_LOCK_FILE { _db_lock_file(); }
#define DBUG_UNLOCK_FILE { _db_unlock_file(); } #define DBUG_UNLOCK_FILE { _db_unlock_file(); }
#define DBUG_ASSERT(A) assert(A) #define DBUG_ASSERT(A) assert(A)
#define DBUG_EXECUTE_IF(keyword,a1) \
{if (_db_on_) {if (_db_strict_keyword_ (keyword)) { a1 }}}
#else /* No debugger */ #else /* No debugger */
#define DBUG_ENTER(a1) #define DBUG_ENTER(a1)
#define DBUG_RETURN(a1) return(a1) #define DBUG_RETURN(a1) return(a1)
#define DBUG_VOID_RETURN return #define DBUG_VOID_RETURN return
#define DBUG_EXECUTE(keyword,a1) {} #define DBUG_EXECUTE(keyword,a1) {}
#define DBUG_EXECUTE_IF(keyword,a1) {}
#define DBUG_PRINT(keyword,arglist) {} #define DBUG_PRINT(keyword,arglist) {}
#define DBUG_PUSH(a1) {} #define DBUG_PUSH(a1) {}
#define DBUG_POP() {} #define DBUG_POP() {}
......
...@@ -57,7 +57,6 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c \ ...@@ -57,7 +57,6 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c \
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \ EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
thr_mutex.c thr_rwlock.c thr_mutex.c thr_rwlock.c
libmysys_a_LIBADD = @THREAD_LOBJECTS@ libmysys_a_LIBADD = @THREAD_LOBJECTS@
noinst_PROGRAMS = charset2html @THREAD_LPROGRAMS@
# test_dir_DEPENDENCIES= $(LIBRARIES) # test_dir_DEPENDENCIES= $(LIBRARIES)
# testhash_DEPENDENCIES= $(LIBRARIES) # testhash_DEPENDENCIES= $(LIBRARIES)
# test_charset_DEPENDENCIES= $(LIBRARIES) # test_charset_DEPENDENCIES= $(LIBRARIES)
...@@ -105,9 +104,6 @@ test_dir$(EXEEXT): test_dir.c $(LIBRARIES) ...@@ -105,9 +104,6 @@ test_dir$(EXEEXT): test_dir.c $(LIBRARIES)
test_charset$(EXEEXT): test_charset.c $(LIBRARIES) test_charset$(EXEEXT): test_charset.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/test_charset.c $(LDADD) $(LIBS) $(LINK) $(FLAGS) -DMAIN $(srcdir)/test_charset.c $(LDADD) $(LIBS)
charset2html$(EXEEXT): charset2html.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/charset2html.c $(LDADD) $(LIBS)
testhash$(EXEEXT): testhash.c $(LIBRARIES) testhash$(EXEEXT): testhash.c $(LIBRARIES)
$(LINK) $(FLAGS) -DMAIN $(srcdir)/testhash.c $(LDADD) $(LIBS) $(LINK) $(FLAGS) -DMAIN $(srcdir)/testhash.c $(LDADD) $(LIBS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment