zoukankan      html  css  js  c++  java
  • mysql 自定义插件调试

    # 创建表的stack

    frame #0: 0x000000011d11f58a ha_spartan.so`Spartan_data::create_table(this=0x00007f9fc1311c40, path="./test/testarc.sde") + 74 at spartan_data.cc:32
    frame #1: 0x000000011d11dded ha_spartan.so`ha_spartan::create(this=0x00007f9fc1314b70, name="./test/testarc", table_arg=0x000070000fd97778, create_info=0x000070000fd9b2f8) + 269 at ha_spartan.cc:923
    frame #2: 0x000000010fe6e416 mysqld`handler::ha_create(this=0x00007f9fc1314b70, name="./test/testarc", form=0x000070000fd97778, info=0x000070000fd9b2f8) + 118 at handler.cc:4526
    frame #3: 0x000000010fe6ed6f mysqld`ha_create_table(thd=0x00007f9fc0060a00, path="./test/testarc", db="test", table_name="testarc", create_info=0x000070000fd9b2f8, update_create_info=false, is_temp_table=false) + 831 at handler.cc:4770
    frame #4: 0x000000011025a877 mysqld`rea_create_table(thd=0x00007f9fc0060a00, path="./test/testarc", db="test", table_name="testarc", create_info=0x000070000fd9b2f8, create_fields=0x000070000fd9b2b0, keys=0, key_info=0x00007f9fbf09d520, file=0x00007f9fbf09d2d0, no_ha_table=false) + 551 at unireg.cc:546
    frame #5: 0x00000001101cd650 mysqld`create_table_impl(thd=0x00007f9fc0060a00, db="test", table_name="testarc", error_table_name="testarc", path="./test/testarc", create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268, internal_tmp_table=false, select_field_count=0, no_ha_table=false, is_trans=0x000070000fd9a25e, key_info=0x000070000fd99f88, key_count=0x000070000fd99f84) + 5232 at sql_table.cc:5009
    frame #6: 0x00000001101cc13a mysqld`mysql_create_table_no_lock(thd=0x00007f9fc0060a00, db="test", table_name="testarc", create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268, select_field_count=0, is_trans=0x000070000fd9a25e) + 506 at sql_table.cc:5125
    frame #7: 0x00000001101cdb60 mysqld`mysql_create_table(thd=0x00007f9fc0060a00, create_table=0x00007f9fbf09c748, create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268) + 272 at sql_table.cc:5174
    frame #8: 0x000000011011bc59 mysqld`mysql_execute_command(thd=0x00007f9fc0060a00) + 9673 at sql_parse.cc:3136
    frame #9: 0x0000000110117ba0 mysqld`mysql_parse(thd=0x00007f9fc0060a00, rawbuf="CREATE TABLE testarc (a int, b varchar(20), c int) ENGINE=SPARTAN", length=65, parser_state=0x000070000fd9d380) + 1376 at sql_parse.cc:6422
    frame #10: 0x00000001101144cf mysqld`dispatch_command(command=COM_QUERY, thd=0x00007f9fc0060a00, packet="CREATE TABLE testarc (a int, b varchar(20), c int) ENGINE=SPARTAN", packet_length=65) + 4367 at sql_parse.cc:1399
    frame #11: 0x00000001101170bb mysqld`do_command(thd=0x00007f9fc0060a00) + 875 at sql_parse.cc:1064
    frame #12: 0x000000011009a562 mysqld`do_handle_one_connection(thd_arg=0x00007f9fc0060a00) + 498 at sql_connect.cc:982
    frame #13: 0x000000011009a30d mysqld`::handle_one_connection(arg=0x00007f9fc0060a00) + 45 at sql_connect.cc:899
    frame #14: 0x0000000110773bdd mysqld`::pfs_spawn_thread(arg=0x00007f9fc17736e0) + 333 at pfs.cc:1861
    frame #15: 0x00007fff9458993b libsystem_pthread.dylib`_pthread_body + 180
    frame #16: 0x00007fff94589887 libsystem_pthread.dylib`_pthread_start + 286
    frame #17: 0x00007fff9458908d libsystem_pthread.dylib`thread_start + 13

    #  创建表

    (lldb) bt

    (lldb) bt
    * thread #22: tid = 0xcfa54, 0x000000011d11ef2b ha_spartan.so`spartan_create_handler(hton=0x00007f9fc1416490, table=0x0000000000000000, mem_root=0x00007f9fc0063af0) + 27 at ha_spartan.cc:102, stop reason = step in
    * frame #0: 0x000000011d11ef2b ha_spartan.so`spartan_create_handler(hton=0x00007f9fc1416490, table=0x0000000000000000, mem_root=0x00007f9fc0063af0) + 27 at ha_spartan.cc:102
    frame #1: 0x000000010fe6296b mysqld`get_new_handler(share=0x0000000000000000, alloc=0x00007f9fc0063af0, db_type=0x00007f9fc1416490) + 203 at handler.cc:442
    frame #2: 0x00000001101cc47f mysqld`create_table_impl(thd=0x00007f9fc0060a00, db="test", table_name="testarc1", error_table_name="testarc1", path="./test/testarc1", create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268, internal_tmp_table=false, select_field_count=0, no_ha_table=false, is_trans=0x000070000fd9a25e, key_info=0x000070000fd99f88, key_count=0x000070000fd99f84) + 671 at sql_table.cc:4640
    frame #3: 0x00000001101cc13a mysqld`mysql_create_table_no_lock(thd=0x00007f9fc0060a00, db="test", table_name="testarc1", create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268, select_field_count=0, is_trans=0x000070000fd9a25e) + 506 at sql_table.cc:5125
    frame #4: 0x00000001101cdb60 mysqld`mysql_create_table(thd=0x00007f9fc0060a00, create_table=0x00007f9fbf09c758, create_info=0x000070000fd9b2f8, alter_info=0x000070000fd9b268) + 272 at sql_table.cc:5174
    frame #5: 0x000000011011bc59 mysqld`mysql_execute_command(thd=0x00007f9fc0060a00) + 9673 at sql_parse.cc:3136
    frame #6: 0x0000000110117ba0 mysqld`mysql_parse(thd=0x00007f9fc0060a00, rawbuf="CREATE TABLE testarc1 (a int, b varchar(20), c int) ENGINE=SPARTAN", length=66, parser_state=0x000070000fd9d380) + 1376 at sql_parse.cc:6422
    frame #7: 0x00000001101144cf mysqld`dispatch_command(command=COM_QUERY, thd=0x00007f9fc0060a00, packet="CREATE TABLE testarc1 (a int, b varchar(20), c int) ENGINE=SPARTAN", packet_length=66) + 4367 at sql_parse.cc:1399
    frame #8: 0x00000001101170bb mysqld`do_command(thd=0x00007f9fc0060a00) + 875 at sql_parse.cc:1064
    frame #9: 0x000000011009a562 mysqld`do_handle_one_connection(thd_arg=0x00007f9fc0060a00) + 498 at sql_connect.cc:982
    frame #10: 0x000000011009a30d mysqld`::handle_one_connection(arg=0x00007f9fc0060a00) + 45 at sql_connect.cc:899
    frame #11: 0x0000000110773bdd mysqld`::pfs_spawn_thread(arg=0x00007f9fc17736e0) + 333 at pfs.cc:1861
    frame #12: 0x00007fff9458993b libsystem_pthread.dylib`_pthread_body + 180
    frame #13: 0x00007fff94589887 libsystem_pthread.dylib`_pthread_start + 286
    frame #14: 0x00007fff9458908d libsystem_pthread.dylib`thread_start + 13

     获取handler

    static int spartan_init_func(void *p)
    {
      DBUG_ENTER("spartan_init_func");
    
    #ifdef HAVE_PSI_INTERFACE
      init_spartan_psi_keys();
    #endif
    
      spartan_hton= (handlerton *)p;
      spartan_hton->state=                     SHOW_OPTION_YES;
      spartan_hton->create=                    spartan_create_handler;
      spartan_hton->flags=                     HTON_CAN_RECREATE;
      spartan_hton->system_database=   spartan_system_database;
      spartan_hton->is_supported_system_table= spartan_is_supported_system_table;
    
      DBUG_RETURN(0);
    }
    
    
    mysql_declare_plugin(spartan)
    {
      MYSQL_STORAGE_ENGINE_PLUGIN,
      &spartan_storage_engine,
      "SPARTAN",
      "jishu",
      "demo storage engine",
      PLUGIN_LICENSE_GPL,
      spartan_init_func,                            /* Plugin Init */
      NULL,                                         /* Plugin Deinit */
      0x0001 /* 0.1 */,
      func_status,                                  /* status variables */
      spartan_system_variables,                     /* system variables */
      NULL,                                         /* config options */
      0,                                            /* flags */
    }
    mysql_declare_plugin_end;

    handler *get_new_handler(TABLE_SHARE *share, MEM_ROOT *alloc,
                             handlerton *db_type)
    {
      handler *file;
      DBUG_ENTER("get_new_handler");
      DBUG_PRINT("enter", ("alloc: 0x%lx", (long) alloc));
    
      if (db_type && db_type->state == SHOW_OPTION_YES && db_type->create)
      {
        if ((file= db_type->create(db_type, share, alloc)))
          file->init();
        DBUG_RETURN(file);
      }
      /*
        Try the default table type
        Here the call to current_thd() is ok as we call this function a lot of
        times but we enter this branch very seldom.
      */
      DBUG_RETURN(get_new_handler(share, alloc, ha_default_handlerton(current_thd)));
    }

      

    # db 类型

    create_table_option:
    ENGINE_SYM opt_equal storage_engines
    {
    Lex->create_info.db_type= $3;
    Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
    }

    storage_engines: ident_or_text { THD
    *thd= YYTHD; plugin_ref plugin= ha_resolve_by_name(thd, &$1, thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE); if (plugin) $$= plugin_data(plugin, handlerton*); else { if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) { my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); MYSQL_YYABORT; } $$= 0; push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, ER_UNKNOWN_STORAGE_ENGINE, ER(ER_UNKNOWN_STORAGE_ENGINE), $1.str); } } ;

    # 新增的断点

    1: name = 'ha_spartan::create', locations = 0 (pending)
    
    2: name = 'create', locations = 0 (pending)
    
    3: file = 'ha_spartan.cc', line = 914, exact_match = 0, locations = 1, resolved = 1, hit count = 1
      3.1: where = ha_spartan.so`ha_spartan::create(char const*, TABLE*, st_ha_create_information*) + 111 at ha_spartan.cc:916, address = 0x000000011d11dd4f, resolved, hit count = 1
    
    4: file = 'ha_spartan.cc', line = 914, exact_match = 0, locations = 1, resolved = 1, hit count = 1
      4.1: where = ha_spartan.so`ha_spartan::create(char const*, TABLE*, st_ha_create_information*) + 111 at ha_spartan.cc:916, address = 0x000000011d11dd4f, resolved, hit count = 1
    
    5: file = 'ha_spartan.cc', line = 914, exact_match = 0, locations = 1, resolved = 1, hit count = 1
      5.1: where = ha_spartan.so`ha_spartan::create(char const*, TABLE*, st_ha_create_information*) + 111 at ha_spartan.cc:916, address = 0x000000011d11dd4f, resolved, hit count = 1
    
    6: file = 'ha_spartan.cc', line = 914, exact_match = 0, locations = 1, resolved = 1, hit count = 1
      6.1: where = ha_spartan.so`ha_spartan::create(char const*, TABLE*, st_ha_create_information*) + 111 at ha_spartan.cc:916, address = 0x000000011d11dd4f, resolved, hit count = 1
    
    7: name = 'ha_spartan::get_share', locations = 1, resolved = 1, hit count = 1
      7.1: where = ha_spartan.so`ha_spartan::get_share() + 39 at ha_spartan.cc:81, address = 0x000000011d11c7a7, resolved, hit count = 1
    
    8: name = 'create_table_impl', locations = 1, resolved = 1, hit count = 1
      8.1: where = mysqld`create_table_impl(THD*, char const*, char const*, char const*, char const*, st_ha_create_information*, Alter_info*, bool, unsigned int, bool, bool*, st_key**, unsigned int*) + 226 at sql_table.cc:4618, address = 0x00000001101cc2c2, resolved, hit count = 1
    
    9: name = 'ha_create_table', locations = 1, resolved = 1, hit count = 0
      9.1: where = mysqld`ha_create_table(THD*, char const*, char const*, char const*, st_ha_create_information*, bool, bool) + 94 at handler.cc:4732, address = 0x000000010fe6ea8e, resolved, hit count = 0
    
    10: name = 'open_table_from_share', locations = 1, resolved = 1, hit count = 0
      10.1: where = mysqld`open_table_from_share(THD*, TABLE_SHARE*, char const*, unsigned int, unsigned int, unsigned int, TABLE*, bool) + 82 at table.cc:2107, address = 0x000000011023d652, resolved, hit count = 0
    
    11: name = 'get_new_handler', locations = 2, resolved = 2, hit count = 1
      11.1: where = mysqld`get_new_handler(TABLE_SHARE*, st_mem_root*, handlerton*) + 44 at handler.cc:437, address = 0x000000010fe628cc, resolved, hit count = 1
      11.2: where = libc++abi.dylib`std::get_new_handler(), address = 0x00007fff92f25de3, resolved, hit count = 0
    
    12: name = 'spartan_create_handler', locations = 1, resolved = 1, hit count = 0
      12.1: where = ha_spartan.so`spartan_create_handler(handlerton*, TABLE_SHARE*, st_mem_root*) + 27 at ha_spartan.cc:102, address = 0x000000011d11ef2b, resolved, hit count = 0
    
    13: name = 'ha_resolve_by_name', locations = 1, resolved = 1, hit count = 0
      13.1: where = mysqld`ha_resolve_by_name(THD*, st_mysql_lex_string const*, bool) + 23 at handler.cc:331, address = 0x000000010fe62387, resolved, hit count = 0
  • 相关阅读:
    《程序员修炼之道》——第二章 注重实效的途径(三)
    《程序员修炼之道》——第二章 注重实效的途径(二)
    《程序员修炼之道》——第二章 注重实效的途径(一)
    win10 磁盘占用高--- 禁用用户改善反馈 CompatTelRunner.exe
    ffmpeg拼接多个音频
    词云-wordcloud
    大数据指数日常应用
    搜索过滤Tip : title,site(搜标题和搜网站)
    eclipse下查看java源码设置
    sqlplus sys as sysdba
  • 原文地址:https://www.cnblogs.com/kisstherain/p/10397598.html
Copyright © 2011-2022 走看看