debug1

mysql> declare id1 int; begin set id1=2; select @id1; end; / ;;
ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE db1.testcur1; expected 1, got 0

ER_SP_WRONG_NO_OF_ARGS


res= sp->execute_procedure(thd, &lex->call_value_list);

m_root_parsing_ctx

  sp_pcontext *get_root_parsing_context() const
  { return const_cast<sp_pcontext *> (m_root_parsing_ctx); }
  
  
  
  129     bool sp_rcontext::init_var_items(THD *thd) 
  #0  sp_rcontext::init_var_items (this=0x7f71680073c8, thd=0x7f7168000b90) at /home/wl/software/mysql-5.7.26/sql/sp_rcontext.cc:136
  
  
  (gdb) p *ctx
$28 = {<Sql_alloc> = {<No data fields>}, callers_arena = 0x8f8f8f8f8f8f8f8f, end_partial_result_set = false, sp = 0x8f8f8f8f8f8f8f8f, 
  m_root_parsing_ctx = 0x7f7168020030, m_var_table = 0x7f716802d7f8, m_var_items = {m_array = 0x7f7168007628, m_size = 1}, m_return_value_fld = 0x0, 
  m_return_value_set = false, m_in_sub_stmt = false, m_visible_handlers = {m_size = 0, m_capacity = 16, m_buff = {{data = '\217' <repeats 128 times>, 
        align = {<No data fields>}}}, m_array_ptr = 0x7f7168007420, m_psi_key = 0}, m_activated_handlers = {m_size = 0, m_capacity = 16, m_buff = {{
        data = '\217' <repeats 128 times>, align = {<No data fields>}}}, m_array_ptr = 0x7f71680074c0, m_psi_key = 0}, m_cstack = {m_array = 0x7f7168007578, 
    m_size = 0}, m_ccount = 0, m_case_expr_holders = {m_array = 0x7f7168007578, m_size = 0}}
(gdb) p ctx->m_var_items

m_root_parsing_ctx

m_root_parsing_ctx->context_var_count()

lex->sphead->m_root_parsing_ctx
lex->sphead->m_root_parsing_ctx->context_var_count()


lex->call_value_list


var

(gdb) p *sp
$4 = {<Query_arena> = {_vptr.Query_arena = 0x2c26a30 <vtable for sp_head+16>, free_list = 0x0, mem_root = 0x7ffa40030728, is_backup_arena = false, 
    is_reprepared = false, state = Query_arena::STMT_EXECUTED}, m_type = SP_TYPE_PROCEDURE, m_flags = 0, m_sp_share = 0x0, 
  m_return_field_def = {<Sql_alloc> = {<No data fields>}, field_name = 0x0, change = 0x0, after = 0x0, comment = {str = 0x0, length = 12582913}, def = 0x0, 
    sql_type = MYSQL_TYPE_DECIMAL, length = 0, char_length = 0, decimals = 0, flags = 0, pack_length = 65536, key_length = 0, unireg_check = Field::NONE, 
    interval = 0x0, save_interval = 0x0, interval_list = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x2d1c530 <end_of_list>, last = 0x7ffa40030288, 
        elements = 0}, <No data fields>}, charset = 0x0, geom_type = Field::GEOM_GEOMETRY, field = 0x0, row = 0 '\000', col = 0 '\000', sc_length = 0 '\000', 
    interval_id = 0 '\000', offset = 0, pack_flag = 65536, gcol_info = 0x0, stored_in_db = false}, m_parser_data = {m_expr_start_ptr = 0x0, 
    m_current_stmt_start_ptr = 0x0, m_option_start_ptr = 0x7ffa40009917 "", m_lex_stack = {<base_list> = {<Sql_alloc> = {<No data fields>}, 
        first = 0x2d1c530 <end_of_list>, last = 0x7ffa400302f0, elements = 0}, <No data fields>}, m_param_start_ptr = 0x7ffa4001427a '\217' <repeats 200 times>..., 
    m_param_end_ptr = 0x7ffa4001427a '\217' <repeats 200 times>..., m_body_start_ptr = 0x7ffa4001427c '\217' <repeats 200 times>..., 
    m_backpatch = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x2d1c530 <end_of_list>, last = 0x7ffa40030320, elements = 0}, <No data fields>}, 
    m_cont_backpatch = {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x2d1c530 <end_of_list>, last = 0x7ffa40030338, elements = 0}, <No data fields>}, 
    m_cont_level = 0, m_saved_memroot = 0x0, m_saved_free_list = 0x0}, m_chistics = 0x7ffa40039fc0, m_sql_mode = 1436549152, m_qname = {
    str = 0x7ffa40030a50 "db1.testcur0", length = 12}, m_explicit_name = false, m_db = {str = 0x7ffa40030a38 "db1", length = 3}, m_name = {
    str = 0x7ffa40030a40 "testcur0", length = 8}, m_params = {str = 0x7ffa400380e0 "", length = 0}, m_body = {
    str = 0x7ffa400380e8 "begin declare id1 int; declare id2 int; set id1 = 2; end", length = 56}, m_body_utf8 = {
    str = 0x7ffa40038128 "begin declare id1 int; declare id2 int; set id1 = 2; end", length = 56}, m_defstr = {
    str = 0x7ffa40038168 "CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `testcur0`()\nbegin declare id1 int; declare id2 int; set id1 = 2; end", 
    length = 132}, m_definer_user = {str = 0x7ffa400381f0 "skip-grants user", length = 16}, m_definer_host = {str = 0x7ffa40038208 "skip-grants host", length = 16}, 
  m_created = 20200407000833, m_modified = 20200407000833, m_recursion_level = 0, m_next_cached_sp = 0x0, m_first_instance = 0x7ffa400301e0, 
  m_first_free_instance = 0x7ffa400301e0, m_last_cached_sp = 0x7ffa400301e0, m_sroutines = {key_offset = 0, key_length = 0, blength = 1, records = 0, flags = 0, 
    array = {buffer = 0x7ffa40034230 "", elements = 0, max_element = 511, alloc_increment = 511, size_of_element = 16, m_psi_key = 0}, 
    get_key = 0x147dffc <sp_sroutine_key(uchar const*, size_t*, my_bool)>, free = 0x0, charset = 0x2d06a40 <my_charset_utf8_general_ci>, 
    hash_function = 0x1853af6 <cset_hash_sort_adapter>, m_psi_key = 0}, m_security_ctx = {m_user = {m_ptr = 0x0, m_length = 0, 
      m_charset = 0x2d06a40 <my_charset_utf8_general_ci>, m_alloced_length = 0, m_is_alloced = false}, m_host = {m_ptr = 0x1e2351d "", m_length = 0, 
      m_charset = 0x2d06a40 <my_charset_utf8_general_ci>, m_alloced_length = 0, m_is_alloced = false}, m_ip = {m_ptr = 0x1e2351d "", m_length = 0, 
      m_charset = 0x2d06a40 <my_charset_utf8_general_ci>, m_alloced_length = 0, m_is_alloced = false}, m_host_or_ip = {m_ptr = 0x1e236a3 "connecting host", 
      m_length = 15, m_charset = 0x2d06a40 <my_charset_utf8_general_ci>, m_alloced_length = 0, m_is_alloced = false}, m_external_user = {m_ptr = 0x1e2351d "", 
      m_length = 0, m_charset = 0x2d06a40 <my_charset_utf8_general_ci>, m_alloced_length = 0, m_is_alloced = false}, 
    m_priv_user = "\000\000\000\000\000\000\000\000\001\000`\000\000\000\000\000\004", '\000' <repeats 39 times>, "\004\000\f\000\000\000\000\000\b", '\000' <repeats 30 times>, m_priv_user_length = 0, m_proxy_user = '\000' <repeats 161 times>, m_proxy_user_length = 0, m_priv_host = '\000' <repeats 60 times>, m_priv_host_length = 0, 
    m_master_access = 0, m_db_access = 1073741824, m_password_expired = false}, m_list_of_trig_fields_item_lists = {<Sql_alloc> = {<No data fields>}, elements = 0, 
    first = 0x0, next = 0x7ffa400306d8}, m_cur_instr_trig_field_items = {<Sql_alloc> = {<No data fields>}, elements = 0, first = 0x0, next = 0x7ffa400306f0}, 
  m_trg_chistics = {action_time = TRG_ACTION_BEFORE, event = TRG_EVENT_INSERT, ordering_clause = TRG_ORDER_NONE, anchor_trigger_name = {str = 0x0, length = 0}}, 
  m_trg_list = 0x0, main_mem_root = {free = 0x7ffa40038260, used = 0x7ffa40036250, pre_alloc = 0x7ffa400301d0, min_malloc = 32, block_size = 8160, block_num = 7, 
    first_block_usage = 0, max_capacity = 18446744073709551615, allocated_size = 32688, error_for_capacity_exceeded = 1 '\001', 
    error_handler = 0x14b038b <sql_alloc_error_handler()>, m_psi_key = 0}, m_root_parsing_ctx = 0x7ffa40030930, 
  m_instructions = {<Mem_root_array_YY<sp_instr*, true>> = {m_root = 0x7ffa40030728, m_array = 0x7ffa40030830, m_size = 3, m_capacity = 32}, <No data fields>}, 
  m_sptabs = {key_offset = 0, key_length = 0, blength = 1, records = 0, flags = 0, array = {buffer = 0x7ffa40032210 "", elements = 0, max_element = 511, 
      alloc_increment = 511, size_of_element = 16, m_psi_key = 0}, get_key = 0x1481401 <sp_table_key(unsigned char const*, unsigned long*, char)>, free = 0x0, 
    charset = 0x2d06a40 <my_charset_utf8_general_ci>, hash_function = 0x1853af6 <cset_hash_sort_adapter>, m_psi_key = 0}, m_sp_cache_version = 0, 
  m_creation_ctx = 0x7ffa40039fe0, unsafe_flags = 0, bDeclareStmt = false}
   = 2
   
  
 放在了 m_root_parsing_ctx
(gdb) p m_root_parsing_ctx
$9 = (const sp_pcontext *) 0x7ffa40030930


(gdb) f 2
#2  0x00000000014847d5 in sp_head::execute_procedure (this=0x7ffa400301e0, thd=0x7ffa40021590, args=0x7ffa40023c68)
    at /home/wl/software/mysql-5.7.26/sql/sp_head.cc:1368
    
(gdb) p this
$12 = (sp_head * const) 0x7ffa400301e0
(gdb) p this->m_root_parsing_ctx
$13 = (sp_pcontext *) 0x7ffa40030930
(gdb) p m_root_parsing_ctx
$14 = (sp_pcontext *) 0x7ffa40030930

    
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000001544e60 in parse_sql(THD*, Parser_state*, Object_creation_ctx*) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:7064
        breakpoint already hit 2 times
2       breakpoint     keep y   0x00000000016768a4 in MYSQLparse(THD*) at /home/wl/software/build/mysql5726/sql/sql_yacc.cc:18964
        breakpoint already hit 38 times
3       breakpoint     keep y   0x0000000001545020 in parse_sql(THD*, Parser_state*, Object_creation_ctx*) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:7125
4       breakpoint     keep y   0x000000000169d529 in MYSQLparse(THD*) at /home/wl/software/mysql-5.7.26/sql/sql_yacc.yy:15395

lex->sphead->m_root_parsing_ctx
lex->sphead->m_root_parsing_ctx->context_var_count()

 
 
 執行 set 
 (gdb) bt
#0  sp_eval_expr (thd=0x7ffa40021590, result_field=0x7ffa400153d0, expr_item_ptr=0x7ffa400390d8) at /home/wl/software/mysql-5.7.26/sql/sp.cc:2759
#1  0x00000000014937de in sp_rcontext::set_variable (this=0x7ffa40015210, thd=0x7ffa40021590, field=0x7ffa400153d0, value=0x7ffa400390d8)
    at /home/wl/software/mysql-5.7.26/sql/sp_rcontext.cc:458
#2  0x0000000000f6decc in sp_rcontext::set_variable (this=0x7ffa40015210, thd=0x7ffa40021590, var_idx=0, value=0x7ffa400390d8)
    at /home/wl/software/mysql-5.7.26/sql/sp_rcontext.h:156
#3  0x000000000148ab3d in sp_instr_set::exec_core (this=0x7ffa40039008, thd=0x7ffa40021590, nextp=0x7ffa66f952c8)
    at /home/wl/software/mysql-5.7.26/sql/sp_instr.cc:1046
#4  0x0000000001489549 in sp_lex_instr::reset_lex_and_exec_core (this=0x7ffa40039008, thd=0x7ffa40021590, nextp=0x7ffa66f952c8, open_tables=true)
    at /home/wl/software/mysql-5.7.26/sql/sp_instr.cc:406
#5  0x000000000148a24d in sp_lex_instr::validate_lex_and_execute_core (this=0x7ffa40039008, thd=0x7ffa40021590, nextp=0x7ffa66f952c8, open_tables=true)
    at /home/wl/software/mysql-5.7.26/sql/sp_instr.cc:747
#6  0x000000000148d08c in sp_lex_instr::execute (this=0x7ffa40039008, thd=0x7ffa40021590, nextp=0x7ffa66f952c8) at /home/wl/software/mysql-5.7.26/sql/sp_instr.h:300
#7  0x0000000001482f36 in sp_head::execute (this=0x7ffa40037510, thd=0x7ffa40021590, merge_da_on_success=true) at /home/wl/software/mysql-5.7.26/sql/sp_head.cc:789
#8  0x0000000001484eec in sp_head::execute_procedure (this=0x7ffa40037510, thd=0x7ffa40021590, args=0x7ffa40023c68)
    at /home/wl/software/mysql-5.7.26/sql/sp_head.cc:1522
#9  0x000000000153f5c2 in mysql_execute_command (thd=0x7ffa40021590, first_level=true) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:4541
#10 0x0000000001541fc3 in mysql_parse (thd=0x7ffa40021590, parser_state=0x7ffa66f96690) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:5577
#11 0x0000000001537a0e in dispatch_command (thd=0x7ffa40021590, com_data=0x7ffa66f96df0, command=COM_QUERY) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:1484
#12 0x0000000001536942 in do_command (thd=0x7ffa40021590) at /home/wl/software/mysql-5.7.26/sql/sql_parse.cc:1025
#13 0x0000000001666f42 in handle_connection (arg=0x3e47280) at /home/wl/software/mysql-5.7.26/sql/conn_handler/connection_handler_per_thread.cc:306
#14 0x0000000001cf22f4 in pfs_spawn_thread (arg=0x3f6bb80) at /home/wl/software/mysql-5.7.26/storage/perfschema/pfs.cc:2190
#15 0x00007ffa729dcdd5 in start_thread () from /lib64/libpthread.so.0
#16 0x00007ffa716a202d in clone () from /lib64/libc.so.6


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章