1.

sqlite3_open 死锁

* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000116e22c22 libsystem_kernel.dylib`__psynch_mutexwait + 10
frame #1: 0x0000000116e57dfa libsystem_pthread.dylib`_pthread_mutex_lock_wait + 100
* frame #2: 0x000000010d550e3a MLPlayer`sqlite3Malloc [inlined] sqlite3_mutex_enter(p=<unavailable>) at sqlite3.c:21778 [opt]
frame #3: 0x000000010d550e2f MLPlayer`sqlite3Malloc(n=127) at sqlite3.c:23035 [opt]
frame #4: 0x000000010d55a7db MLPlayer`sqlite3DbMallocRaw(db=0x00007f9cf7617ed0, n=<unavailable>) at sqlite3.c:23374 [opt]
frame #5: 0x000000010d559402 MLPlayer`sqlite3DbMallocZero(db=<unavailable>, n=127) at sqlite3.c:23318 [opt]
frame #6: 0x000000010d59c943 MLPlayer`sqlite3FindCollSeq [inlined] findCollSeqEntry at sqlite3.c:92028 [opt]
frame #7: 0x000000010d59c8f7 MLPlayer`sqlite3FindCollSeq(db=<unavailable>, enc=<unavailable>, zName=<unavailable>, create=<unavailable>) at sqlite3.c:92079 [opt]
frame #8: 0x000000010d55ffe5 MLPlayer`createCollation(db=<unavailable>, zName=<unavailable>, enc=<unavailable>, pCtx=<unavailable>, xCompare=<unavailable>, xDel=<unavailable>) at sqlite3.c:124965 [opt]
frame #9: 0x000000010d55f84b MLPlayer`openDatabase(zFilename="/Users/temp/Library/Developer/CoreSimulator/Devices/F31C98A5-1D5C-4053-B6E2-1E622E430721/data/Containers/Data/Application/CCAE5F2D-0E09-4EBE-866A-C89D4E59AD38/Documents/xx.db", ppDb=<unavailable>, flags=<unavailable>, zVfs=0x0000000000000000) at sqlite3.c:125438 [opt]
frame #10: 0x000000010d0f82d8 MLPlayer`-[PAFMDatabase open](self=0x000060000008ece0, _cmd="open") at PAFMDatabase.m:144

http://bbs.csdn.net/topics/370165256

2. xcode mysql connector

. 编译Connector/C(因为Connector/C++依赖Connector/C)
解压缩源码, 比如释放到F盘, 并改名为mysqlc(纯粹为了方便说明)
打开CMAKE-GUI(在安装目录里找), Source Path选择"F:\mysqlc", Build Path选择"F:\buildc"
Build Path可以和Source Path一样
点Configure, 选择编译器与平台, 点Finish, 出现"Configuring done"后点Generate
出现"Generating done"后, CMAKE部分完事儿
在"F:\buildc"里找项目文件(sln), 打开, 编译(注意Debug与Release), C组件搞定

http://blog.csdn.net/sidyhe/article/details/50845583

http://mirrors.sohu.com/mysql/Connector-C/mysql-connector-c-6.1.6-src.tar.gz

3.

ulong
cli_safe_read_with_ok(MYSQL *mysql, my_bool parse_ok,
my_bool *is_data_packet)
{
...
if (net->read_pos[] == )
{
/*
After server reprts an error, usually it is ready to accept new commands and
we set stage to READY_FOR_COMMAND. This can be modified by the caller of
cli_safe_read().
*/
MYSQL_TRACE_STAGE(mysql, READY_FOR_COMMAND); if (len > )
{
uchar *pos= net->read_pos+;
net->last_errno=uint2korr(pos);
pos+=;
len-=;
if (protocol_41(mysql) && pos[] == '#')
{
strmake(net->sqlstate, (char*)pos+, SQLSTATE_LENGTH);
pos+= SQLSTATE_LENGTH+;
}
else
{
/*
The SQL state hasn't been received -- it should be reset to HY000
(unknown error sql state).
*/ my_stpcpy(net->sqlstate, unknown_sqlstate);
} (void) strmake(net->last_error,(char*) pos,
MY_MIN((uint) len,(uint) sizeof(net->last_error)-));
}
else
set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate);
/*
Cover a protocol design error: error packet does not
contain the server status. Therefore, the client has no way
to find out whether there are more result sets of
a multiple-result-set statement pending. Luckily, in 5.0 an
error always aborts execution of a statement, wherever it is
a multi-statement or a stored procedure, so it should be
safe to unconditionally turn off the flag here.
*/
mysql->server_status&= ~SERVER_MORE_RESULTS_EXISTS; DBUG_PRINT("error",("Got error: %d/%s (%s)",
net->last_errno,
net->sqlstate,
net->last_error));
return(packet_error);
}

(lldb) p net->buff

(unsigned char *) $0 = 0x0000000101809000 "\377z\x04#42S02Table 'test.address_book_group_00' doesn't exist"

(lldb) p net->buff[0]

(unsigned char) $1 = '\xff'

(lldb) p net->buff[1]

(unsigned char) $2 = 'z'

(lldb) p net->buff[2]

(unsigned char) $3 = '\x04'

(lldb) p net->buff[5]

(unsigned char) $4 = '2'

(lldb) p net->buff[6]

(unsigned char) $5 = 'S'

(lldb) p net->buff[7]

(unsigned char) $6 = '0'

(lldb) p net->buff[8]

(unsigned char) $7 = '2'

(lldb) p net->buff[9]

(unsigned char) $8 = 'T'

(lldb) p net->buff[10]

(unsigned char) $9 = 'a'

(lldb) p net->buff[11]

(unsigned char) $10 = 'b'

(lldb) p net->buff[12]

(unsigned char) $11 = 'l'

(lldb) p net->buff[13]

(unsigned char) $12 = 'e'

(lldb) p pos

(uchar *) $13 = 0x0000000101809003 "#42S02Table 'test.address_book_group_00' doesn't exist"

(lldb) p pos

(uchar *) $14 = 0x0000000101809009 "Table 'test.address_book_group_00' doesn't exist"

cli_read_query_result: error: Got error: 1146/42S02 (Table 'test.address_book_group_00' doesn't exist)

1146=0x47a=z\x04  net->last_errno

\377=\xff=255     net->read_pos[0] == 255

42S02             net->sqlstate

https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_err_packet.html

The Payload of an ERR Packet
Type Name Description
int<1> header 0xFF ERR packet header
int<2> error_code error-code
if capabilities & CLIENT_PROTOCOL_41 {
string[1] sql_state_marker # marker of the SQL state
string[5] sql_state SQL state
}
string<EOF> error_message human readable error message
MYSQL * STDCALL
CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
const char *passwd, const char *db,
uint port, const char *unix_socket,ulong client_flag)
{
...
pkt_end= (char*)net->read_pos + pkt_length;
/* Check if version of protocol matches current one */
mysql->protocol_version= net->read_pos[];
DBUG_DUMP("packet",(uchar*) net->read_pos,);
DBUG_PRINT("info",("mysql protocol version %d, server=%d",
PROTOCOL_VERSION, mysql->protocol_version));
if (mysql->protocol_version != PROTOCOL_VERSION)
{
set_mysql_extended_error(mysql, CR_VERSION_ERROR, unknown_sqlstate,
ER(CR_VERSION_ERROR), mysql->protocol_version,
PROTOCOL_VERSION);
goto error;
}
server_version_end= end= strend((char*) net->read_pos+);
mysql->thread_id=uint4korr((uchar*) end + );
end+=;
/*
Scramble is split into two parts because old clients do not understand
long scrambles; here goes the first part.
*/
scramble_data= end;
scramble_data_len= AUTH_PLUGIN_DATA_PART_1_LENGTH + ;
scramble_plugin= NULL;
end+= scramble_data_len; if (pkt_end >= end + )
mysql->server_capabilities=uint2korr((uchar*) end);
if (pkt_end >= end + )
{
/* New protocol with 16 bytes to describe server characteristics */
mysql->server_language=end[];
mysql->server_status=uint2korr((uchar*) end + );
mysql->server_capabilities|= uint2korr((uchar*) end + ) << ;
pkt_scramble_len= end[];
if (pkt_scramble_len < )
{
set_mysql_error(mysql, CR_MALFORMED_PACKET,
unknown_sqlstate); /* purecov: inspected */
goto error;
}
}
...
/*
Part 2: invoke the plugin to send the authentication data to the server
*/ if (run_plugin_auth(mysql, scramble_buffer, scramble_data_len,
scramble_plugin, db))
goto error;

(lldb) p net->read_pos

(unsigned char *) $0 = 0x0000000101009e00 "\n5.6.21"

'\n'=PROTOCOL_VERSION(10)  mysql->protocol_version

4.

MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
unsigned int fields)
... while (*(cp=net->read_pos) == || is_data_packet)
{
result->rows++;
if (!(cur= (MYSQL_ROWS*) alloc_root(&result->alloc,
sizeof(MYSQL_ROWS))) ||
!(cur->data= ((MYSQL_ROW)
alloc_root(&result->alloc,
(fields+)*sizeof(char *)+pkt_len))))
{
free_rows(result);
set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN();
}
*prev_ptr=cur;
prev_ptr= &cur->next;
to= (char*) (cur->data+fields+);
end_to=to+pkt_len-;
for (field= ; field < fields ; field++)
{
if ((len=(ulong) net_field_length(&cp)) == NULL_LENGTH)
{ /* null field */
cur->data[field] = ;
}
else
{
cur->data[field] = to;
if (len > (ulong) (end_to - to))
{
free_rows(result);
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
DBUG_RETURN();
}
memcpy(to,(char*) cp,len); to[len]=;
to+=len+;
cp+=len;
if (mysql_fields)
{
if (mysql_fields[field].max_length < len)
mysql_fields[field].max_length=len;
}
}
}
cur->data[field]=to; /* End of last field */
if ((pkt_len= cli_safe_read(mysql, &is_data_packet)) == packet_error)
{
free_rows(result);
DBUG_RETURN();
}
}

(uchar *) cp = 0x0000000101805800 "\x012\x06aaaaaa"

(char *) to = 0x0000000101802840 "2"

(lldb) p len

(ulong) $0 = 1

(char *) to = 0x0000000101802842 "aaaaaa"

(lldb) p len

(ulong) $1 = 6

(uchar *) cp = 0x000000010280b400 "\x0222\x06aaaaaa"




第11月第20天 sqlite3_open xcode mysql connector的更多相关文章

  1. 2016年11月30日 星期三 --出埃及记 Exodus 20:21

    2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...

  2. 2016年11月29日 星期二 --出埃及记 Exodus 20:20

    2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...

  3. 2016年11月28日 星期一 --出埃及记 Exodus 20:19

    2016年11月28日 星期一 --出埃及记 Exodus 20:19 and said to Moses, "Speak to us yourself and we will listen ...

  4. 2016年11月27日 星期日 --出埃及记 Exodus 20:18

    2016年11月27日 星期日 --出埃及记 Exodus 20:18 When the people saw the thunder and lightning and heard the trum ...

  5. 2016年11月26日 星期六 --出埃及记 Exodus 20:17

    2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...

  6. 2016年11月25日 星期五 --出埃及记 Exodus 20:16

    2016年11月25日 星期五 --出埃及记 Exodus 20:16 "You shall not give false testimony against your neighbor.不 ...

  7. 2016年11月24日 星期四 --出埃及记 Exodus 20:15

    2016年11月24日 星期四 --出埃及记 Exodus 20:15 "You shall not steal.不可偷盗.

  8. 2016年11月23日 星期三 --出埃及记 Exodus 20:14

    2016年11月23日 星期三 --出埃及记 Exodus 20:14 "You shall not commit adultery.不可奸淫.

  9. 2016年11月22日 星期二 --出埃及记 Exodus 20:13

    2016年11月22日 星期二 --出埃及记 Exodus 20:13 "You shall not murder.不可杀人.

随机推荐

  1. 【zigbee 】2.4G信号发放器 AT2401C PA功放

    概述 AT2401C 是一款面向Zigbee,无线传感网络以及其他2.4GHz 频 段无线系统的全集成射频功能的射频前端单芯片.AT2401C 是采用 CMOS 工艺实现的单芯片器件,其内部集成了功率 ...

  2. php OPcache

    众所周知php是一种解释型语言,它的执行可分为如下几个流程: Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens) Parsing, 将Tokens转换成简单而有意义的表达式 ...

  3. js中判断是否包含某个字符串

    1,字符串中是否包含 str.indexOf("3")indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果要检索的字符串值没有出现,则该方法返回 -1. ...

  4. Notes of Daily Scrum Meeting(12.18)

    前期落下的进度我们会在周六周日赶一下,在编译课程设计中期测试之后集中处理项目中的问题. 今天的任务总结如下: 团队成员 今日团队工作 陈少杰 调试后端连接的部分,寻找bug 王迪 测试搜索功能,修改b ...

  5. What is the difference between WinRT, UWP and WPF?

    在学习UWP的过程中确实有这个迷惑,在此分享一下. UWP (Universal Windows platform), Metro and WinRT are all result of Micros ...

  6. Android控件第1类——TextView

    Android提供TextView,它不能被编辑,它的子类EditText可以编辑.TextView有很多子类. 1.EditText,继承自TextView EditText可以编辑. 可以设置in ...

  7. PHP仿LED点阵,读取字库文字,并转化为二进制输出

    <?php $xml=simplexml_load_file("zimu.xml");//导入XML文件,从XML文件里知道需要提取的字体的信息 $font_height=$ ...

  8. springboot+dubbo+zookeeper微服务实践demo

    微服务化越来越火,实际上是应互联网时代而生的,微服务化带来的不仅是性能上的提升,更带来了研发组织的更加便利,协作更加轻松,团队效能更高. 当然不能为了技术而技术,我们需要切合实际的对业务进行划分,降低 ...

  9. Delphi : 制作程序启动欢迎界面

    制作欢迎界面的代码,大家参考 登陆窗体命名為:loginform.找到工程文件(Project -> View Source),找到如下代碼部分:begin   Application.Init ...

  10. Jenkins之自动构建

    修改job的配置: Build periodically:不管版本是否修改,都会执行: Poll SCM:只有当版本有修改才会执行.