![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c-c++_gdb_etc
bamboolsu
技术总监,产品经理,开发经理,项目经理,PMP, Scrum master, CM
丰富的java,HTML5,python, C/C++开发开发经验,
motorola, google, 第九城市等公司工作经验
跨境电商相关(进出口商城,erp等)产品规划,研发
丰富的产品管理,项目管理,需求管理,技术开发管理敬仰
linux,windows, wxworks等多平台开发
展开
-
如何有效地解Bug (RED方法)
解bug应当是修复代码中的缺陷,而不只是隐藏起来!(译注 :解Bug时常发生分析时总感觉快找到答案了,而后面却一再陷入僵局。比如,将线程同步问题引起的一些时而有,时而没有的问题。分析时可能会认为这是个典型的线程同步问题,A线程没有按照预期的方式改变某个变量,导致了B线程处理出错。这样的分析结果如果没有调试(Debug)的支持,就有可能将开发者带入死胡同,找出一大堆的解决方案可能都无法完整地转载 2015-02-08 09:49:38 · 610 阅读 · 0 评论 -
Linux的时间表示和计算函数
1.时间的表示 2.时间的测量 3.计时器的使用 1。时间表示 在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果.这个时候我们可以使用下面两个函数 #include time_t time(time_t *tloc); char *ctime(const time_t *clock); time 函数返回从1970年1月1原创 2015-01-23 21:59:44 · 721 阅读 · 0 评论 -
Linux动态链接库高级应用
在《LINUX下动态链接库的创建与应用》一文中,我介绍了LINUX动态链接库的基本知识.其要点是:用户根据实际情况需要,利用dlopen,dlsym,dlclose等动态链接库操作函数,装入指定的动态链接库中指定的函数,然后加以执行.程序中使用很少的动态函数时,这样的做法尚可.如果程序需要调用大量的动态函数,那么采用这样的编程手段将是非常繁复的,所以我们必须使用一种更为聪明的办转载 2015-01-23 22:09:01 · 406 阅读 · 0 评论 -
gdb my experience
1, 条件断点(gdb) br EKMemory.cpp:ekmalloc if tmpsize == 4760或者(gdb) br EKMemory.cpp:29 if tmpsize == 4760(gdb) info breakpoints Num Type Disp Enb Address What2 breakpoint原创 2015-01-23 12:24:50 · 652 阅读 · 0 评论 -
内存调试 - MEMWATCH
MEMWATCH 由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具,您可以自己下载它(请参阅本文后面部分的参考资料)。只要在代码中添加一个头文件并在 gcc 语句中定义了 MEMWATCH 之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH 支持 ANSI C,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous转载 2015-01-23 13:58:30 · 531 阅读 · 0 评论 -
C++11 FAQ中文版
C++11 FAQ中文版http://www.chenlq.net/cpp11-faq-chshttp://www.stroustrup.com/C++11FAQ.htmlMorgan Stanley | Columbia University | Texas A&M Universityhome |原创 2015-03-20 17:41:31 · 4329 阅读 · 0 评论 -
Elements of Modern C++ Style
Elements of Modern C++ Stylehttp://herbsutter.com/elements-of-modern-c-style/Elements of Modern C++ Style“C++11 feels like a new language.” – Bjarne StroustrupT转载 2015-03-20 17:40:14 · 589 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议转载 2015-05-27 09:59:40 · 398 阅读 · 0 评论 -
c++11 FAQ
http://www.stroustrup.com/C++11FAQ.html原创 2015-04-10 16:41:34 · 1613 阅读 · 0 评论 -
c++11
一, c++ 标准历程:C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1] 。C++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布[2原创 2015-06-11 14:01:44 · 517 阅读 · 0 评论 -
C++11 多线程
Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的。 C++11 多线程相关的头文件C++11 新标准中引入了四个头文件来支持多线程编程,他们原创 2015-06-11 13:45:19 · 521 阅读 · 0 评论 -
重温STL, STD
一, 定义STL = Standard Template Library,标准模板库http://baike.baidu.com/link?url=ZgViQn8lnJ3Z8MhF-R8MmEeiUeXUi9cnrCXCxUhC0PioEpdOQQ4FbNBOUOLpN6YhNLxEX2OSJPIfVOOf8ekaZ_yiA77k6mn8pFpgc2MvPwC标原创 2015-06-11 09:49:51 · 1757 阅读 · 0 评论 -
C++11特性
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的 常规装备。你也许看到过许多类似介绍各种C++11特性的文章。C++开发者都需要学习和使用的C++11新特性。1, auto在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了原创 2015-05-27 13:23:50 · 397 阅读 · 0 评论 -
c++11 使用c++风格的cast: static_cast<type>(expression) const_cast<type> dynamic_cast reinterpret_cast
c++编程中, 尽量避免使用c语言风格的 cast,具体实例如下:EXP05-CPP. Do not use C-style castsSkip to end of metadataCreated by Fred Long, last modified by Will Snavely on Mar原创 2015-07-02 08:33:23 · 1943 阅读 · 0 评论 -
c++11 container liber: std::queue std::map std::vector std::unique_ptr
typedef std::map,std::unique_ptr> TSocketPacketMap;typedef std::vector> TBufferRange;std::unique_ptr SocketPacketMap;std::unique_ptr BufferRanges;原创 2015-03-16 16:30:16 · 1884 阅读 · 0 评论 -
Java && C++
Java: JAVA 基础知识 缓存技术(刷新机制) 多线程(并发处理): ThreadPool; thread local; 网络编程(通信)NIO 事务处理(分布式处理机制) 并发处理机制 接口与抽线类 设计模式 JRE 优化 Servlet 线程安全架构 JEE SSH: st原创 2015-06-12 10:40:03 · 440 阅读 · 0 评论 -
c++11 & 14: unique_ptr shared_ptr std::make_unique(c++14)
参考网站: http://www.cplusplus.com/reference/utility/pair/Both of these classes are smart pointers, which means that they automatically (in most cases) will deallocate the object tha原创 2015-07-02 11:21:03 · 1151 阅读 · 0 评论 -
Makefile,如何传递宏定义DEBUG
1, gcc中使用宏的例子:在程序中,通过有这样的代码段: #ifdef DEBUG printf("Debug is define!\n"); #endif printf("Hello World!\n"); 希望在编译时,传递DEBUG定义,实现Debug版本和Release版本的区别。 gcc -DDEBUG原创 2015-01-23 21:57:34 · 2148 阅读 · 0 评论 -
GDB多线程调试基本命令和实现简介以及一个常见问题的解决
先介绍一下GDB多线程调试的基本命令。info threads显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。前面有*的是当前调试的线程。thread ID切换当前调试的线程为指定ID的线程。thread apply ID1 ID2 command让一个或者多个线程执行GDB命令command。threa原创 2015-01-23 13:56:31 · 1613 阅读 · 0 评论 -
GDB多线程调试--冰山一角
首先附加进程上下文: 进程PID=24253shell> gdb programname 24253查看所有线程(gdb) info threads 8 Thread 0x409f8940 (LWP 24255) 0x0000003535a0d631 in recv () from /lib64/libpthread.so.0 7 Thread 0x40be394原创 2015-01-23 12:59:53 · 947 阅读 · 0 评论 -
大端和小端字节序
大端和小端字节序的问题在网络中以及在不同的操作系统的兼容性中是一个比较大的问题。它关系到不同操作系统和网络传输是否能够保证数据的语义正确性。 对于一个字节而言,大端和小端没有任何的区别,但是对于多个字节而言,就存在着显著的区别。这个区别我们可以很容易想到,如果提供了一个地址,比如0x37041200,需要读取这个地址的一个字,也就是4个字节的一个数据。那么是读取从0x370412原创 2015-01-22 12:35:36 · 469 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的原创 2015-01-22 12:37:09 · 410 阅读 · 0 评论 -
c-c++程序员应知道的几个基本问题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的AS原创 2015-01-22 12:33:14 · 392 阅读 · 0 评论 -
sprintf函数的用法
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [,原创 2015-01-22 12:33:59 · 458 阅读 · 0 评论 -
C++中常见const用法小结
C++中常见const用法小结经常看到const这个关键字。关于这个关键字,以前在看c++ primer的时候,有看到了不少,可惜好久没有看,加上当时看的太快了,现在的印象又模糊了。这几天又遇到这个问题,对有些问题的理解不是很肯定,因此想在这边做个小结,以备平时参考。 准备从一下两个方面来进行,一是网上搜索,参考网上的一些好的文章,对于正确的,实行“拿来主义”,可以原创 2015-01-22 12:31:32 · 394 阅读 · 0 评论 -
十六进制 字符打印
printf打印字符的十六进制格式,需要unsigned char转换一下printf("[%02x]\n",(unsigned char)str[i]);gdb打印16进制字符:p/x str[0]unsigned char **specificInfoH; for(UINT32 i=0; isize - bytesSkipped; i+原创 2015-01-21 16:08:12 · 3121 阅读 · 0 评论 -
函数实现-memcpy-strcpy-memmove-memset
测试代码:#include #include #include char string1[60] = "000001234567";int main( void ){ fprintf(stderr, "%s:%d:%s, string1=%s leosu \n",__FILE__, __LINE原创 2015-01-21 16:09:51 · 450 阅读 · 0 评论 -
dmalloc的使用
dmalloc到/usr/local/bin/目录下。 (6) 设置环境变量:对于 Bash, ksh, and zsh (http://www.zsh.org/), 在 `.bashrc', `.profile', or `.zshrc'文件中加入一行 ( -b 参数表示针对Bash的输出):function dmalloc { eval `/usr/local/bin/dm原创 2015-01-22 12:26:19 · 4228 阅读 · 0 评论 -
C/C++内存区分配
一.在c中分为这几个存储区1.栈 - 有编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的>另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。 - 程序结束释放原创 2015-01-22 12:35:08 · 357 阅读 · 0 评论 -
C中如何调用C++函数
1,在C中如何调用C++函数将函数用extern "C"声明;将 C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如:// C++ code:extern "C" void f(int);void f(int i){// ...}然后,你可以这样使用 f():/* C原创 2015-01-22 12:28:36 · 2236 阅读 · 0 评论 -
回调函数讲解
一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢? 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。 而那个函数在需要的时候,利原创 2015-01-22 12:36:07 · 418 阅读 · 0 评论 -
经典 C++ 书籍大全
本文总结了标准C++的东西,没有MFC等东西的书,也有一些作者的简介,希望有用。 意见建议到:ken.mingyuan@gmail.com ken.mingyuan@hotmail.com 由于最近忙于某种考试,所以回信比较缓慢,敬请原谅。 C++ 书籍大汇 语言基础入门: 1. C++ Primer 《C++入门》(通常不用中文名) by Stanley B.原创 2015-01-22 12:30:35 · 624 阅读 · 0 评论 -
C++ Coding 指南
This document is a companion to theC++ Coding Standard. It collects various informalhints on aspects to consider when designing and implementing code in the FOO software stack.C++ Coding Guide原创 2015-02-25 13:58:18 · 622 阅读 · 0 评论 -
Valgrind 内存检测工具
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Valg原创 2015-01-23 12:25:09 · 587 阅读 · 0 评论 -
linux core dump
How to enable core dump:– #ulimit c unlimited– #echo /tmp/core.%e.%p > /proc/sys/kernel/core_pattern原创 2015-01-23 13:59:32 · 376 阅读 · 0 评论 -
Linux的时间函数
Linux的时间函数#include struct timezone tz;gettimeofday (&tv , &tz);struct timeval tv;gettimeofday (&tv , NULL);fprintf(stderr, "%s:%d:%s, tv_sec:%ld tv_usec:%ld leosu \n",__FILE__,原创 2015-01-23 12:22:42 · 503 阅读 · 0 评论 -
c c++ 2015 年最热门的 10 篇技术文章
2015 C/C++ 热门文章 Top 10 来自微信公众号 cppFans「CPP开发者」专注分享C/C++开发相关的技术文章和工具资源。长按上面的二维码关注cppFans 后,发送热文标题下的关键字阅读文章《第 24 届国际 C 语言混乱代码大赛结果出炉》关注cppFans 后,发送 20原创 2016-01-24 21:43:29 · 790 阅读 · 0 评论