Continuing on from Tutorial 2.
When reviewing the 2.1. C/C++ Coding Guidelines for MySQL, you will see that the MySQL Source uses within the C/C++ code DBUG (Fred Fish’s debug library). This is one of the 3rd party open source products that are documented in the Internals 1.4. The Open-source Directories.
You will also find some usage in the MySQL Manual E.3 The DBUG Package. So enough talk, how do you use this.
DBUG
You get the DBUG output by running a mysqld debug version with the argument –debug. The output for the SHOW AUTHORS commands is:
T@9190304: >dispatch_command T@9190304: | >alloc_root .. T@9190304: | query: SHOW AUTHORS T@9190304: | >mysql_parse T@9190304: | | >mysql_init_query T@9190304: | | | >lex_start T@9190304: | | | | >alloc_root T@9190304: | | | | | enter: root: 0x9590b38 T@9190304: | | | | | exit: ptr: 0x95c1c70 T@9190304: | | | | <alloc_root T@9190304: | | | <lex_start T@9190304: | | | >mysql_reset_thd_for_next_command T@9190304: | | | <mysql_reset_thd_for_next_command T@9190304: | | <mysql_init_query T@9190304: | | >Query_cache::send_result_to_client T@9190304: | | <query_cache ::send_result_to_client T@9190304: | | >mysql_execute_command T@9190304: | | | >mysqld_show_authors T@9190304: | | | | >alloc_root T@9190304: | | | | | enter: root: 0x9590b38 T@9190304: | | | | | exit: ptr: 0x95c1c78 T@9190304: | | | | <alloc_root ... T@9190304: | | | | >send_fields T@9190304: | | | | | packet_header: Memory: 0x8c2480 Bytes: (4) 01 00 00 01 T@9190304: | | | | | >alloc_root T@9190304: | | | | >Protocol::write T@9190304: | | | | <protocol ::write ... T@9190304: | | | | >send_eof T@9190304: | | | | | packet_header: Memory: 0x8c2550 Bytes: (4) 05 00 00 51 T@9190304: | | | | | >net_flush T@9190304: | | | | | | >vio_is_blocking T@9190304: | | | | | | | exit: 0 T@9190304: | | | | | | <vio_is_blocking T@9190304: | | | | | | >net_real_write T@9190304: | | | | | | | >vio_write T@9190304: | | | | | | | | enter: sd: 23, buf: 0x0x95b9bd0, size: 5107 T@9190304: | | | | | | | | exit: 5107 T@9190304: | | | | | | | <vio_write T@9190304: | | | | | | <net_real_write T@9190304: | | | | | <net_flush T@9190304: | | | | | info: EOF sent, so no more error sending allowed T@9190304: | | | | <send_eof T@9190304: | | | <mysqld_show_authors T@9190304: | | <mysql_execute_command T@9190304: | | >query_cache_end_of_result T@9190304: | | <query_cache_end_of_result ... T@9190304: | <mysql_parse T@9190304: | info: query ready T@9190304: | >log_slow_statement T@9190304: | <log_slow_statement T@9190304: >dispatch_command
Using some of the debug options you get the following output with –debug=d,info,error,query,general,where:O,/tmp/mysqld.trace
create_new_thread: info: creating thread 3 create_new_thread: info: Thread created ?func: info: handle_one_connection called by thread 3 ?func: info: New connection received on socket (23) ?func: info: Host: localhost ?func: info: vio_read returned -1, errno: 11 thr_alarm: info: reschedule process_alarm: info: sig: 14 active alarms: 1 ?func: info: client_character_set: 8 check_user: info: Capabilities: 238213 packet_length: 16777216 Host: 'localhost' Login user: 'rbradfor' Priv_user: '' Using password: no Access: 0 db: '*none*' send_ok: info: affected_rows: 0 id: 0 status: 2 warning_count: 0 send_ok: info: OK sent, so no more error sending allowed do_command: info: vio_read returned -1, errno: 11 thr_alarm: info: reschedule process_alarm: info: sig: 14 active alarms: 1 do_command: info: Command on socket (23) = 3 (Query) dispatch_command: query: SHOW AUTHORS send_eof: info: EOF sent, so no more error sending allowed dispatch_command: info: query ready do_command: info: vio_read returned -1, errno: 11 thr_alarm: info: reschedule process_alarm: info: sig: 14 active alarms: 1 do_command: info: Command on socket (23) = 1 (Quit) ~THD(): info: freeing security context end_thread: info: sending a broadcast end_thread: info: unlocked thread_count mutex
I have found the following format good for comparing with the MySQL Source Code. —debug=d:N:F:L:O,/tmp/mysqld.trace
49: sql_parse.cc: 1536: do_command: info: Command on socket (23) = 3 (Query) 50: my_alloc.c: 172: alloc_root: enter: root: 0x9068b38 51: my_alloc.c: 219: alloc_root: exit: ptr: 0x9099c30 52: safemalloc.c: 128: _mymalloc: enter: Size: 16384 53: safemalloc.c: 197: _mymalloc: exit: ptr: 0x909cc80 54: safemalloc.c: 262: _myfree: enter: ptr: 0x9095bf8 55: sql_parse.cc: 1757: dispatch_command: query: SHOW AUTHORS .. 88: sql_show.cc: 385: mysqld_show_authors: packet_header: Memory: 0x940590 Bytes: (4) .. 166: protocol.cc: 385: send_eof: packet_header: Memory: 0x940550 Bytes: (4) 05 00 00 51 167: viosocket.c: 184: vio_is_blocking: exit: 0 168: viosocket.c: 105: vio_write: enter: sd: 23, buf: 0x0x9091bd0, size: 5107 169: viosocket.c: 117: vio_write: exit: 5107 170: protocol.cc: 342: send_eof: info: EOF sent, so no more error sending allowed 171: sql_lex.cc: 199: lex_end: enter: lex: 0x9068b58 172: sql_parse.cc: 1796: dispatch_command: info: query ready 173: my_alloc.c: 331: free_root: enter: root: 0x9068b38 flags: 1 174: viosocket.c: 184: vio_is_blocking: exit: 0 175: viosocket.c: 36: vio_read: enter: sd: 23, buf: 0x0x9091bd0, size: 4 176: viosocket.c: 49: vio_read: vio_error: Got error 11 during read 177: viosocket.c: 52: vio_read: exit: -1 178: sql_parse.cc: 809: do_command: info: vio_read returned -1, errno: 11 190: sql_parse.cc: 1536: do_command: info: Command on socket (23) = 1 (Quit) 191: my_alloc.c: 331: free_root: enter: root: 0x9068b38 flags: 1 192: mysqld.cc: 1681: close_connection: enter: fd: socket (23) error: '' 193: sql_handler.cc: 628: mysql_ha_flush: enter: tables: (nil) mode_flags: 0x02
This will make a lot more sense with my upcoming presentation where you will see clear use and interaction between source files such as sql_parse.cc & sql_show.cc.
For more information check out Making Trace Files