libmemcached的调试

来源:互联网 发布:淘宝上的杰克琼斯 编辑:程序博客网 时间:2024/05/16 13:50

1、libmemcached的调试

libmemcached的版本:1.0.3

./configure之后将Makefile中的CFLAGS、CPPFLAGS、CXXFLAGS都加上-g -O0之后就可以使用gdb进行调试了。


2、测试主程序

分别给出C版和C++版:

// libmemcached_test.c #include <stdio.h>#include <string.h>#include <unistd.h>#include <libmemcached/memcached.h> int main(void) {  memcached_st *memc;  memcached_server_st *servers = NULL;  memcached_return rc;  const char* server_list = "localhost:11211";  const char* key= "key";  const char* value= "value";  char* retval = NULL;  size_t len = 0;  time_t expire = 0;  uint32_t flags = 0;   memc = memcached_create(NULL);  servers = memcached_servers_parse(server_list);  rc = memcached_server_push(memc, servers);  memcached_server_list_free(servers);    if(rc == MEMCACHED_SUCCESS) {    printf("added server successfully\n");  } else {    printf("couldn't add server: %s\n", memcached_strerror(memc, rc));  }   // set  rc = memcached_set(memc, key, strlen(key), value, strlen(value), expire, flags);  if(rc == MEMCACHED_SUCCESS) {    printf("key stored successfully\n");  } else {    printf("couldn't store key: %s\n", memcached_strerror(memc, rc));  }   // get  retval = memcached_get(memc, key, strlen(key), &len, &flags, &rc);  if(rc == MEMCACHED_SUCCESS) {    printf("key got successfully\n");    printf("value: %s\n", retval);  } else {    printf("couldn't get key: %s\n", memcached_strerror(memc, rc));  }  free(retval);    // delete  rc = memcached_delete(memc, key, strlen(key), expire);  if(rc == MEMCACHED_SUCCESS) {    printf("key deleted successfully\n");  } else {    printf("couldn't delete key: %s\n", memcached_strerror(memc, rc));  }   // get  retval = memcached_get(memc, key, strlen(key), &len, &flags, &rc);  if(rc == MEMCACHED_SUCCESS) {    printf("key got successfully\n");    printf("value: %s\n", retval);  } else if(rc == MEMCACHED_NOTFOUND) {      printf("couldn't get key (not found): %s\n", memcached_strerror(memc, rc));  } else if(rc == MEMCACHED_FAILURE) {      printf("couldn't get key (failure): %s\n", memcached_strerror(memc, rc));  }  free(retval);     memcached_free(memc);  return 0;}

#include <iostream>#include <libmemcached/memcached.hpp>   //该头文件内部也包含了<libmemcached-1.0/memcached.h>,并在memcache命名空间中定义了class Memcache int main(void) {  using namespace std;//  try {    memcache::Memcache memc("127.0.0.1", 11211);    string key = "mykey1";    string value_str = "myvalue1";    vector<char> value(value_str.begin(), value_str.end());    vector<char> retval;    time_t expire = 0;    uint32_t flags = 0;     // set    //   bool set(const std::string &key, const std::vector<char> &value,    //            time_t expiration, uint32_t flags)    if(memc.set(key, value, expire, flags)) {      cout<<"key stored successfully"<<endl;    } else {      cerr<<"couldn't store key"<<endl;    }     // get    //   bool get(const std::string &key, std::vector<char> &ret_val)    if(memc.get(key, retval)) {      cout<<"key got successfully"<<endl;      cout<<&retval[0]<<endl;    } else {      cerr<<"couldn't get key"<<endl;    }     // delete    //   bool remove(const std::string &key)    if(memc.remove(key)) {      cout<<"key deleted successfully"<<endl;    } else {      cerr<<"couldn't delete key"<<endl;    }//  } catch(const memcache::Error& e) {//    cerr<<"catch exception"<<endl;//    cerr<<e.what()<<endl;//    cerr<<e.getErrno()<<endl;//  }  return 0;}

由于我的libmemcached默认安装到/usr/local/libmemcached/,所以添加环境变量:

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/libmemcached/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/libmemcached/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/libmemcached/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/libmemcached/include

g++ test.cpp  -g -O0 -o test -lmemcached就可以gdb调试该程序了。

原创粉丝点击