1 Simple Simple

尚未进行身份认证

生命不止,编程不息

等级
博文 68
排名 7w+

(Windbg调试七)c++内存泄漏问题定位

c++内存泄漏问题定位     内存泄漏指的是直接内存分配构造函数(例如new,malloc,HeapAlloc)来获得内存后,但是没有释放该片区域内存而导致的泄漏问题。我们的行情服务器是一个长期运行在客户服务器上的应用程序,如果存在内存泄漏,那么当内存增长到某个值时,会极大地影响当前机器的性能,直至影响我们的行情服务程序,甚至由于内存已不够而导...

2019-07-20 14:40:31

(Windbg调试六)c++句柄泄漏问题定位

c++句柄泄漏问题定位     在Windows内核中定义了一组操作系统特有的对象类型,包括文件对象,线程对象,Event对象等等。要使用某种对象类型,必须首先生成这种对象类型的一个实例,以事件对象为例,以CreateEvent可以创建或者打开一个有名的事件对象,在该函数内部,它调用了内核接口来创建一个事件对象,并且分配了相应的内存来容纳这个对象...

2019-07-17 20:02:23

DLL的导出函数

DLL的导出函数,__declspec(dllexport),.def模块定义文件,extern“C”区别一,__declspec(dllexport)二,.DEF模块定义文件三,__declspec(dllexport)和def文件的区别1,显式调用2,隐式调用四,结论     我们在编写动态库时,经常会用到类似extern“C”,__...

2019-07-11 19:54:29

修改lib库对应的dll名称

修改lib库对应的dll名称     在某些场景下,我们需要修改lib库对应的dll名称,这当然不是简单的给dll重命名一下,或者使用notepad++等工具打开lib文件,修改其中的dll名称。后一种方式会直接导致lib文件破坏,vs编译报错。     既然不能直接从lib下手,我们可以逆向考...

2019-07-08 20:14:46

(Windbg调试一)minidump崩溃捕捉

(Windbg调试四)dump崩溃捕捉一,系统的异常处理顺序二,SetUnhandleExceptionFilter函数三,Minidump四,代码演示平常我们编写c++代码时,发生崩溃,编译器都可以帮我们捕捉到并且定位到具体的代码,这是因为编译器接收到了操作系统发送过来的程序异常通知并进行了处理。但是在使用我们软件的用户环境上,没有编译器帮我们处理这个异常,操作系统会使用它的异常处理机制:弹出...

2019-07-03 20:12:49

amqp_basic_publish报错AMQP_STATUS_TABLE_TOO_BIG

amqp_basic_publish报错AMQP_STATUS_TABLE_TOO_BIG今天在做业务的时候,碰到一个奇怪的现象,发送同样属性和内容的消息,到相同的交换机上,debug模式下能发送成功,release模式下发送失败,并且报错AMQP_STATUS_TABLE_TOO_BIG,查看rabbitmq源码解释这个报错如下:简单解释就是:由于消息体太小,amqp_table_t不能被...

2019-06-20 20:59:09

查看dll的附加依赖项

查看dll的附加依赖项一,vs的dumpbin二,depends最近做的项目除了主程序,其他都是插件,动态加载运行的,有时候缺少依赖项而运行不起来,因此总结了两种查看dll依赖项的方法。一,vs的dumpbinvisualstudio编译器自带有dumpbin工具,可以通过它查看exe或者dll的依赖项。通过开始菜单打开vs命令行工具。输入dumpbin/dependents文件名...

2019-06-19 19:45:54

(Windbg调试五)C++内存越界导致的std::map异常

C++内存越界导致的std::map异常     前段时间在定位一个程序崩溃的问题,虽然有dump文件,能够看到出问题的具体代码行数,问题都出在同一个map上。     dump1显示map下标插入数据时异常。     dump2显示调用ma...

2019-06-13 21:14:23

LoadLibrary失败,GetLastError= 193

LoadLibrary失败,GetLastError=193LoadLibrary失败,GetLastError报错193时,一般是加载的dll所依赖的某个dll它的依赖项不存在所报的错,可以用DependencyWalker验证该dll所依赖的加载项是否都存在。DependencyWalker安装vs时一般都自带有,如果没有也可以去官网下载http://www.dependencywal...

2019-06-10 09:02:40

内存映射文件的应用

内存映射文件的应用一,操作系统加载EXE和DLL二,读写大文件三,进程间通信     内存映射文件是windows开发下常用的一种技术,既可以用来读写磁盘上的大文件,也可以用来实现进程间的通信,本文主要对内存映射的几大用途做一个简述。一,操作系统加载EXE和DLL     当一个应用程序启动时...

2019-06-08 11:31:35

RabbitMQ-死信队列DLX

RabbitMQ-死信队列DLX一,死信队列二,消息变成死信的几种情况三,死信队列的设置1,使用策略配置2,使用可选队列参数配置3,通过web管理界面设置死信队列四,死信队列的优点一,死信队列     利用DLX,当消息在一个队列中变成死信(deadmessage)之后,它能被重新publish到另一个Exchange,这个Exchan...

2019-05-07 23:23:40

RabbitMQ-operation queue.declare caused a channel exception precondition_failed错误

RabbitMQ-operationqueue.declarecausedachannelexceptionprecondition_failed错误今天早上有个同事在RabbitMQ服务器上做测试时,连续publishmessage两次都导致RabbitMQ服务挂掉,进程直接中止。但是按照他的描述我发布同样的消息,却是正常的。第一反应是查看日志,进入mq的日志目录,默认位置为:...

2019-05-07 22:44:51

RabbitMQ-topic主题模式

RabbitMQ-topic主题模式     Topic:所有符合routingKey(此时可以是一个表达式)的routingKey所绑定的队列可以接收消息;     发送到topic类型交换机的消息的routing_key不能随便设置–它必须是多个单词组成,用点分割。单词可以是任意的,但它们...

2019-05-05 19:48:34

RabbitMQ-direct直通模式

RabbitMQ-direct直通模式     direct:把Exchange上的消息发送到匹配routingkey的队列中。     消费者队列绑定关键字到交换机上,发送者将数据根据关键字发送到交换机上,交换机根据关键字去遍历绑定到它上面的队列,将数据发送至指定关键字的队列。&nbs...

2019-05-02 15:10:46

C++进程间通信之SendMessage和PostMessage

C++多进程通信之SendMessage和PostMessage1,使用介绍2,需要注意的地方3,WM_COPYDATA的原理     SendMessage和PostMessage在Win32编程中是很常见的,主要是用来发送消息到指定的窗口,一般用于工作线程传输数据到UI线程。其中SendMessage函数将指定的消息发送到一个或多个窗口。此函...

2019-04-28 10:27:48

C++虚表地址和虚函数地址

C++虚表地址和虚函数地址虚函数是c++实现多态性的一个重要知识点,本文主要解析虚函数在内存中的地址,以及与虚表地址的关系。声明一个类,包含两个虚函数,一个普通成员函数和一个类成员。调试程序,查看test对象的内存分布如下:_vptr是一个指向虚表的指针,可以理解为一个int*p[2],在本例中,p[0]是指向Test::func1()地址的指针,p[1]是指向Test::func2...

2019-04-12 20:17:44

C++ RabbitMQ封装

C++RabbitMQ封装RabbitMq的源码可以在官网下载https://www.rabbitmq.com/,需要使用cmake转为vs工程。由于源码不大,此处选择编译librabbitmq,生成librabbitmq.4.lib静态库,直接链接到自己的程序中。附上vs版的源码,我使用的是vs2017,低版本的可以自行百度修改vs版本。首先封装CQueue类,包含队列的持久化,自动创建...

2019-03-28 18:43:00

RabbitMQ-fanout广播模式

RabbitMQ发送模式之fanout     fanout:所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);     消息的接受者需要创建一个队列,绑定到该fanout交换机上,监听来自发送端的消息广播。广播是实时的,prod...

2019-03-28 18:25:15

memcmp比较结构体

memcmp比较结构体例子1:例子2:在日常编码中,有时为了方便,当一个结构体内不含有指针成员时,我没会使用memcmp来对两个结构体进行比较,但是这种做法不是一个正确的方法,也可能会导致错误的比较结果,我们以下面的例子来进行验证。例子1:#include<iostream>structInfo{ chara; intb;};intmain(){ I...

2019-03-14 22:37:46

makefile通用模板

makefile通用模板结合自己编译redis测试代码,总结出一个makefile模板,以下makefile是以redis的测试代码为例进行验证的(请见我另一篇博文Linux下C++访问Redis)#wildcard把指定目录./和../lib下的所有后缀是cpp的文件全部展开。SRCS=$(wildcard*.cpp)#OBJS将$(SRCS)下的.cpp文件转化为.o...

2019-02-20 22:30:01
奖章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。