自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个程序员的修炼之路

踩过C++的坑,淌过Python,go的水;愿和大家一起讨论后端的开发和调试技术。

  • 博客(92)
  • 资源 (10)
  • 论坛 (40)
  • 收藏
  • 关注

原创 GoReplay进阶之插件实现

GoReplay神器最有效的功能就是在基本不影响线上服务机器运行的情况下,非侵入式地将真实流量导入到本地磁盘文件或者测试机器,实现测试机器上采用真实流量进行测试,从而保证产品发布的质量。在上一篇文章<<HTTP流量拷贝测试神器GoReplay>>, 笔者主要对以下四个方面进行了描述。流量复制测试流量保存到文件和重放功能介绍HTTP请求过滤HTTP请求更改但是我们可能还会碰到如下问题:流量测试结果对比:这个是指,比如即将发布新的程序,将其测试结果和原先的版本测试结果

2021-11-27 20:10:20 321

原创 HTTP流量拷贝测试神器GoReplay

一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上的流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会明显暴露,比如并发处理不当导致的Crash也随之出现。 那么我们有什么方法能够在上线之前完成这些测试呢?有的,那就是GoReply。GoReply概述当前越来越多的产品SaaS

2021-11-20 16:16:34 1421

原创 谈谈多例模式(multiton)的使用

之前的文章<<谈谈单例模式>>介绍过单例模式, 其全局只会生成一个实例化的对象。当初采用的是全局配置文件的实践案例, 因为比较适合采用单例模式。设计模式是前辈们通过丰富的工程实践后总结出的经验。所以笔者认为对于设计模式的理解,并不仅仅在于看懂这个模式的实现方式,更重要的是明白什么时候该使用什么设计模式,而要做到这个,离不开的是不断地实践。注意这里的实践,并不是说手写一遍设计模式的实现,而是多做一些项目,从项目中汲取经验,才能理解的更加深刻,变为自己能够灵活运用的知识。而本文也将从

2021-10-22 20:43:38 73

原创 Lambda表达式

常见的语言中都提供Lambda语法糖,比如C#, Python, Golang等。本文将探讨下C++ 11引入的Lamdba语法糖。语法糖是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。有编程实践经验的同学一定能够快速的理解Lamdba产生的意义,而缺乏编程经验的同学,跟着我一起来梳理下Lamdba给我们带来了哪些便利性?函数指针和对象函数因为笔者用Lambda最多的场景是回调函数,先说说回调函数。在编程中回调函数

2021-10-04 21:53:09 96 1

原创 谈谈单例模式

单例模式是一个很常见的设计模式,也广泛应用于程序开发。其具有如下特点:一个类只有一个实例化对象全局可以使用那么有人要问,那我不就定义一个类,程序只初始化一个全局的实例就好了吗? 没错,这样是可以的。但是我们都知道程序会经过多人的接手维护和开发,比如第N个接手程序的时候,并不知道这个类定义的时候只能初始化一个实例,然后又实例化了新的对象, 则可能会造成意想不到的场景。那么这时候就要提到防御性编程,个人认为单例模式的实现也是防御性编程的一种方式,让这个类保证只有一个实例化对象,并且如果试图构造多个对象

2021-09-19 20:09:15 26

原创 插件式开发架构综述

投稿者: 地下潜行者1. 概述在现有软件开发中,业务越来越复杂,代码规模越来越大,依赖的人力也越来越多。为了降低系统模块内部耦合度,减少开发难度,也为了能够支持多团队的并行开发,插件式开发架构变得愈加流行,尤其是在桌面软件、移动端应用中。对于后端开发,微服务的形式也越来越流行,但是据笔者看来,微服务的很多设计思路,和插件式开发架构的设计理念也有相近之处。Eclipse, Visual Studio, VSCode等,都是插件式开发架构的典型案例。现代软件提供插件式开发架构,一方面是服务于产品自身内部开

2021-09-05 12:00:43 99

原创 对象池的使用场景以及自动回收技术

对象池在编程中,我们经常会涉及到对象的操作,而经常的操作模式如下图所示:创建对象->使用对象->销毁对象。而这个对象有可能创建的时候会需要构建很多资源,消耗比较大, 比如:在hiredis的SDK中每次都创建一个redisContext,如果需要查询,那就首先要进行网络连接。如果一直都是上图的工作方式,那将会频繁的创建连接,查询完毕后再释放连接。重新建立连接,让网络的查询效率降低。这个时候就可以构建一个对象池来重复利用这个对象,并且一般要做到线程安全:从对象池中获取对象,如果没有对象

2021-08-29 21:31:35 55

原创 Protobuf用过没?

一个故事在读书的时候,参与的第一个是实质性的项目,其中有一部分网络通信,基于socket编程。网络通讯TCP/IP相当于交通工具,上层应用协议还得自己设计。 学过计算机网络这门课的,自然会对所学的知识举一反三。首先查看一个TCP的协议格式:protobuf,语言之间的内容传递,进程间通信。protobuf 2 vs 3json vs protobuf参考<>...

2021-08-23 22:33:45 24

原创 你踩过几种C++内存泄露的坑?

在`Modern C++`之前,C++无疑是个更容易写出坑的语言,无论从开发效率,和易坑性,让很多新手望而却步。比如内存泄露问题,就是经常会被写出来的坑,本文就让我们一起来看看,这些让现在或者曾经的`C++`程序员泪流满面的`内存泄露`场景吧。你是否有踩过?

2021-08-16 12:05:25 67

原创 Windows C++堆破坏场景及分析

一个堆破坏的老故事还记得第一次碰到堆破坏的时候,大概十年前了,当时在学校开发一个Wireshark插件,可是有一个问题我久久未能解决: 我修改后的Wireshark运行的时候偶尔启动的时候会出现程序崩溃,那时候也不会用Windbg, 后来用Visual Studio启动Wireshark, 也是偶尔报错,这个时候可以看到堆栈,只记得当时是在一个很正常的内存分配或者释放的时候出现崩溃。那么总结为两点:偶尔重现,那么也就是我们常说的还能跑起来,跑不起来那么就重启进程,重启进程无效,那就万能方法重启机器。这

2021-08-08 14:34:20 140 3

原创 基于消息的事件驱动机制(Message Based, Event Driven)

投稿者: 地下潜行者1. 基本模型概述基于消息的事件驱动机制是一个通用模型,广泛应用于桌面软件开发、网络应用程序开发、前端开发等技术方向中。本文主要描述基本模型、基本框架,用于说明不同技术的共性知识。可以理解为外部操作事件,被转化为消息存放于队列中;而每种类型的消息都有对应的处理;通过消息循环,完成读消息、调用消息处理这个过程。这个过程,只要应用不退出,会一直进行下去。下图的模型从Windows应用程序而来,但是具有一定的通用性。2. 模型在MFC程序中的应用MFC(Microsoft Found

2021-08-01 19:09:41 138

原创 谈一谈Windows中的堆

如果在Windows中编程应该了解一些Windows的内存管理,而堆(Heap)也属于内存管理的一部分。Windows Heap下图参考<<Windows高级调试>>所画,并做了一些小小的修改。可以看出来程序中对堆的直接操作主要有三种:进程默认堆。每个进程启动的时候系统会创建一个默认堆。比如LocalAlloc或者GlobalAlloc也是从进程默认堆上分配内存。你也可以使用GetProcessHeap获取进程默认堆的句柄,然后根据用这个句柄去调用HeapAlloc达到在系统

2021-07-28 16:02:53 81

原创 C++常见的三种内存破的场景和分析

有一定C++开发经验的同学大多数踩过内存破坏的坑,有这么几种现象:比如某个变量整形,在程序中只可能初始化或者赋值为1或者2, 但是在使用的时候却发现其为0或者其他的情况。对于其他类型,比如字符串等,可能出现了一种出乎意料的值!程序在堆上申请内存或者释放内存的时候,在内存充足的情况下,居然出现了堆错误。当出现以上场景的时候,你该思考一下,是不是出现了内存破坏的情况了。而本文主要通过展示和分析常见的三种内存破坏导致覆盖相邻变量的场景,让读者在碰到类似的场景,不至于束手无策。而对于堆上的内存破坏,很常见并

2021-07-18 21:45:30 102 1

原创 从一个单元测试用例来说说编程中的编码问题

在编程中,大多数程序员都离不开编码问题: 系统的默认区域和语言设置,代码文件的编码,以及代码中字符串的编码。编码简述以及Windows默认配置一提到编码大家最熟悉的莫过于ASCII(American Standard Code for Information Interchange), 其采用7个bit表示128个字符,包含了常见的英文字符、数字,控制字符等。 但是ASCII不包含中文,日文等文字的编码,便出现了针对中文的编码GB2312,GBK等编码,针对日文的Shift_JIS编码,他们都兼容ASC

2021-07-10 17:38:59 88 2

原创 C++ RAII实现golang的defer

在之前一篇文章<<从lock_guard来说一说C++中常用的RAII>> 讲解了RAII, 其实一种常见的资源管理方式,减少了资源泄露的风险。 同事和我说是不是就是智能指针, 准确来说RAII是一种思想,一般是利用栈上对象初始化进行资源的申请,在其生命周期结束的时候,自动调用其析构函数,对资源进行释放。 比如std::string, std::lock_guard都属于RAII的一种实现,那么对于不同资源的管理我是否都要实现一个类似于std::lock_guard一样的实现,其实不

2021-06-26 19:06:13 65 1

原创 微软Debug CRT库是如何追踪C++内存泄露的?

本人在之前已经写过四篇关于Windows中如何查找内存泄露的方法,基本上可以说可以帮你找到内存泄露的问题所在。<<Windows内存泄露分析之DebugDialog>><<Windows程序内存泄漏(Memory Leak)分析之Windbg>><<Windows程序内存泄漏(Memory Leak)分析之UMDH>><<vmmap分析内存泄露问题>>那么为什么要写这篇文章呢?本人在逛知乎的时候,

2021-06-11 21:32:52 43

原创 vmmap分析内存泄露问题

vmmap是sysinternals工具集中的一个工具,主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是,可以通过对比两个不同时间的内存使用情况的Snapshot,来查找内存泄露问题。vmmap介绍当你用vmmap去查看一个正在运行的进程的时候。可以看到如下图,不同类型的内存使用采用不同的颜色标明。VMMap主要列举了以下几种类型的内存使用情况:Free: 图中显示137434599232K,是不是被吓到了。这个一般是指虚拟地址空间。每个进程都有自己的虚拟地址空间,比如32位的一般为4

2021-06-02 07:26:36 188

原创 一致性HASH算法研究

一致性HASH算法研究投稿者: 地下潜行者1.引言​ 在研究分布式存储Ceph的CRUSH算法时,看到文章介绍它是一种特殊的一致性HASH算法,于是我便开始研究一致性HASH算法,做先期准备,发现理念确实接近,所以先研究一致性HASH算法的实现思路。2.一致性HASH的出现背景及其优势​ 在分布式系统中,常常利用HASH算法进行数据分布,使得海量数据均匀的分布在不同的缓存服务器上,目的是希望将数据均匀的分布到各节点,分担压力,尤其是在缓存系统中。一个典型的设计如下:2

2021-05-21 07:26:28 71

原创 栈上内存溢出漏洞利用之Return Address

程序员大多都碰到过栈上内存溢出溢出,最常见的结果是导致程序Crash,有时候也有可能因为覆盖栈上的信息导致程序执行一些意想不到的逻辑,这种情况往往比起Crash更加糟糕。在阅读本文之前,最好熟悉<<你了解函数调用过程吗?>> 文章的讲解: 以32位程序为例,讲解了函数调用是如何利用栈的。局部变量存放在栈上,而当局部变量是一个数组,那么在操作过程中就很容易发现溢出问题,即读/写数据操作了其空间。在大多数系统中,栈默认是由高地址向低地址扩展,并且在小端机器中低位在低地址,如果在写数组

2021-05-16 22:25:57 3675 1

原创 栈溢出场景的分析(2)

在上一篇文章<<栈溢出的场景分析和建议>>中,本人分享了如何查找程序Crash的函数调用栈,然后通过代码审查找到栈溢出的原因。但是却有一些场景通过代码审查不易找到问题,比如如下两点:函数的调用逻辑复杂,且触发逻辑依赖于输入样例。这样通过代码审查是很难看出问题所在的。当触发的栈溢出问题在非自己公司开发的第三方库中,无法获取源代码,也不易看出问题。那么针对上面这两点,都需要一个东西去做辅助分析,那就是触发栈溢出的输入内容(这的所谓输入内容不是指用户在交互界面输入,而是指触发这个

2021-05-06 22:30:37 53 1

原创 Windows内存泄露分析之DebugDialog

Windows中内存泄露的文章本人已经写过两篇<<Windows程序内存泄漏(Memory Leak)分析之UMDH>>和<<Windows程序内存泄漏(Memory Leak)分析之Windbg>>。如果有丰富调试经验的同学会发现,很难用一种工具或者方法去分析所有的场景,尤其当工程庞大的时候。本文要介绍的就是微软提供的DebugDialog, 他可以用于分析Hang,性能问题,内存泄露问题等等。对于内存泄露问题,DebugDialog分析后会给出一个完整的R

2021-05-04 13:06:31 123

原创 栈溢出的场景分析和建议

场景介绍有时候当你收到一个dump后,大多数情况可以通过k命令查找到导致栈溢出的函数。但是本文要讲的是,曾经碰到过的栈溢出(stackoverflow), 却无法直接通过k命令查看到当前的函数调用栈。 下面将介绍一个简单的方法,找到导致栈溢出的函数。样例代码先声明下,因为产品的实际分析不能够通过网络分享。下面的样例代码,实际上不会导致在上一章场景介绍中提到的问题,可以直接通过crash的栈查找到代码,本文只是通过这个例子来讲解如下场景的分析思路: 如果栈溢出了,通过k命令却无法查找到函数调用栈。#i

2021-04-15 21:22:47 85

原创 Windows程序内存泄漏(Memory Leak)分析之Windbg

之前本人写了一篇<<Windows程序内存泄漏(Memory Leak)分析之Windbg>>。这种方法有一定的局限性:实践证明,当程序复杂,内存频繁的申请释放,通过UMDH对比的文件将会非常的大,并且很难直接看出内存泄露所在。UMDH在收集信息的需要符号文件,不太适合于在客户的机器上进行操作。调试方法很难一通百用,因为不同的工具都有自己的局限性,也有适合自己的分析场景,这个取决于碰到的问题。那么本文来介绍一种,使用Windbg分析内存泄露的方法。样例代码这个样例代码中

2021-04-04 20:42:40 153

原创 从lock_guard来说一说C++中常用的RAII

常见问题在一个函数中(或者一个{...}作用域)有时候会创建/引用了一个资源,而在​这个函数结束的时候需要对这个资源进行释放。常见的场景:申请了一段内存,退出时候需要释放打开了一个文件,退出需要关闭文件统计某个函数调用的当前引用次数,进入的时候引用加一,退出的时候引用减一某个{...}作用域开始需要加锁,执行完代码后需要解锁等等…以上面的锁为例, 在进入函数的时候加锁,在函数退出的时候解锁。这种写法笔者认为可能会带来两个问题:在互斥区的代码有可能会有多处返回return, 在每个re

2021-04-01 09:26:44 74

原创 free一个合法的地址也会导致crash?

场景描述在Windows平台上使用C++开发了一个服务,其中组合了各种各样的第三方组件,一般以lib/dll和头文件的形式使用。有这样一种场景,如下图所示,应用程序申请了一段内存ptr, 但在调用lib.dll的函数接口中其调用了free(ptr)。一般来说我们也尽量避免在一个组件中申请内存,而在另一个组件中释放,这里恰巧是一个bug导致了跨组件的内存申请和释放。那么请各位读者思考一下,这样会有问题吗?如果你是一个老司机,也许已经发现,在某些情况下会在调用free(ptr)的时候导致程序crash。

2021-03-06 21:59:18 115

原创 我的程序被谁干掉了?

终端产品一般部署在客户的环境中,那么奇奇怪怪的问题也就容易出现了。比如Windows产品进程为什么忽然停止了? 这个时候稍微有些经验的程序员会做出以下判断:中型的产品中,代码比较复杂。是不是程序中有什么退出逻辑,没有注意到?是不是程序崩溃了,比如资源不足或者代码bug?是不是系统中的其他程序关闭了我们的进程?比如客户的脚本或者其他的软件。是不是程序中有什么退出逻辑,没有注意到?这种情况一般通过Debug Log 可以进行追踪。比如常见的程序退出的时候会有Log记录。是不是程序崩溃了,比如资源

2021-01-24 13:39:34 73

原创 实现一个Windows服务

你是否想过要实现一个Windows程序,可以让它在系统启动的时候自动运行?或者后台运行,不显示界面?或者希望运行的时候能够方便的指定权限?那么Windows服务可以满足你的需求。本文主要介绍如何用C++编写一个具有监测功能的Windows服务。先根据以下三点进行讲解:Windows服务是如何管理和运行的?如何实现和使用Windows服务?如何实现一个具有监测功能的Windows服务?Windows服务控制管理器Windows控制服务管理器(Service Control Manager)主要

2021-01-17 09:00:51 250

原创 你了解函数调用过程吗?

函数调用是编程语言都有的概念,也许你听说过函数调用栈,但是大家都知道函数调用是如何完成的吗?我们为什么要了解这个过程:对于程序运行机制中的数据结构和实现的了解,对自己开发程序有着启发作用碰到一些疑难杂症的时候,比如函数栈溢出了或者函数栈破坏了,如何从蛛丝马迹中寻找问题的原因。了解栈溢出可能带来的危害,黑客也许会利用栈溢出的漏洞进行攻击。这篇博文我们一起来对函数调用的过程进行探究。程序样例下面是这篇博文要用到的一个样例程序:程序在main中调用了FunAdd函数。本篇就先来研究一下:函数的

2021-01-03 09:17:48 218

原创 句柄泄露问题追踪

无论是在编写Windows程序还是Linux程序,都可能存在句柄泄露的问题。在Linux中一般来说一个进程的fd使用是有上限的,可以使用ulimit命令进行上限查看,当出现fd泄露的时候,可能会出现socket创建失败,文件打不开等问题。Windows类似,本文主要阐述了对Windows中的句柄泄露的追踪方法。Windows句柄泄露在Windows开发中,当调用Windows API,比如CreateFile, CreateEvent, CreateThread 等API的时候,都会返回一个句柄Hand

2020-12-27 10:52:00 524

原创 Windows程序内存泄漏(Memory Leak)分析之UMDH

小木发现线上的程序通过任务管理器发现内存不断的增长,怀疑是不是内存泄漏呢?用户态内存泄漏可能是句柄泄漏,堆内存泄露,Socket, GDI对象等等。而对于C++程序员来说,碰到最多的无疑是堆内存泄露:也就是通过malloc或者new从堆上申请的内存,使用完成后,并没有释放,导致程序使用的内存越来越多。小木找到了一个分析利器UMDH: 这也是Windbg工具集中的其中一个利器,它可以在一个时间点记录程序的当前程序使用的堆内存申请的信息,过一段时间后再记录一次程序使用的堆内存申请的信息,然后比较两次的结果来找

2020-12-13 14:57:31 438

原创 “操作无法完成,因为其中的文件夹或文件已在另一个程序中打开”解决方法

有时候,当我们删除某个文件夹的时候,提示操作无法完成,因为其中的文件夹或文件已在另一个程序中打开。 如下图所示:这个时候我们一般会尝试如下的操作:先看看是不是有程序正在使用这个目录下的文件,比如 Visual Studio,可是,有时候我们关闭了程序后,可还是会继续提示这样的错误或者继续删除目录下的其他文件,直到发现是哪个文件无法删除,然后再想想是不是有其他程序打开了呢?如果还是找不到/想不到呢?终极方法登出账户或者重启机器,好吧,这个是万能解决方法。不过作为一个程序员应该有更加精准的方法,

2020-12-06 13:52:54 4837 1

原创 配置PDB符号文件服务

配置PDB符号文件服务器的想法刚入职的小木,前不久刚刚解决了一次crash问题《Windbg分析程序崩溃实践》。 小木没有松懈,继续进行项目代码和Debug技术的学习,同时也思考了一个问题**“产品每隔一段时间就会发布新的版本,当出现Crash问题的时候得手动去拷贝响应版本的pdb文件到本机进行调试,有没有什么方式可以实现自动化呢?”** 嗯,小木是一个合格的程序员,程序员就是致力于让重复的工作自动化。小木继续想,如果能把产品每次发布的pdb文件存储到一个服务器,就像微软的symbol server

2020-11-21 20:05:30 223 2

原创 Windbg分析程序崩溃实践

1. 项目场景本故事纯属虚构。初入职场的小木,负责维护一个博客系统,后端采用C++编写,部署在Windows服务器上。刚刚熟悉完产品的小木,接到了后台服务的报警,服务器后端偶尔会程序崩溃。刚开始小木还有点慌张,脑子里面浮现出各种问题,这个是程序的bug吗?茫茫的代码如何寻找问题?log能看到线索吗?当冷静下来后,小木忽然想起前几天看的两篇文章<<Windbg调试----Windbg入门>>和<<Windows程序Dump收集>>,还没动手过呢,正好练习练习

2020-11-15 16:55:33 344

原创 Windbg调试----多线程控制调试

在调试程序的时候,可能经常会有这样的需求,让一个线程在特定的时候才让其开始执行或者暂停执行。比如复杂的多线程导致死锁的问题,又或者多线程中的Race Condition 导致程序执行异常等。很多时候,我们可以借助编写调试代码来达到多线程的调试,可是有些情况下调试的执行粒度是指令级别的,那么这个时候我们得借助调试利器Windbg了。本文我们将以《C/C++编程教训—-函数内静态类对象初始化非线程安全(

2017-09-03 18:29:36 2669

原创 C/C++编程教训----函数内静态类对象初始化非线程安全(C++11之前)

不少程序员在编写程序的时候,会使用函数内静态(static)变量,既能满足函数内这个变量可以持久的记录某些信息,又使其访问范围的控制局限于函数内。但函数内静态类对象初始化是非线程安全的。问题背景在我们产品中对log4cxx做了一些简单的封装 (采用VS2005编译),其中会调用到getWarn这个接口。由于这个函数存在非线程安全的问题,导致程序Crash。为了更好的描述问题,博主后面采用一个简单的例

2017-09-03 16:57:59 2536 1

原创 CPU 100%问题的查找

在对代码进行测试的时候,发现进程占用了100%的单核CPU资源。并且发现在另一个环境,这个进程占用了50%的CPU资源,因为在这个环境中是2核的CPU。而此时这个进程还并没有处理任何的数据,也就是说会有一个线程一个只占用一个CPU核的资源。对于这个问题研究的方法主要用到了两个工具:Process Explorer和Windbg。使用Process Exporer查找占用CPU资源的线程博主采用了一个

2017-05-28 09:54:58 1255

原创 C/C++编程教训----数据结构的类型别名和memset

问题描述学习微软,我们经常会这样定义数据结构, 并且定义了数据结构别名StructTest,和数据结构指针别名LPStructTest, 这样定义也许让程序的类型更加简洁。typedef _StructTest{ int iVal; char csStr[100];}StructTest, *LPStructTest;数据结构变量定义一般使用StructTest sTest这种形

2017-05-14 16:52:55 758

原创 Windows中实现不依赖账户登录的开机启动程序

在Windows中很多的任务,我们希望能够在Windows 启动之后自动运行。举个例子,公司有个订饭系统,基本每天都需要登录去订饭,于是写一个脚本实现自动订饭。可是你的电脑每天要关机,当然不希望开机后还需要手动运行这个订饭脚本了。于是此时我们要将其这种脚本实现为开机自动启动脚本。 但要注意本文要讲的开机启动的程序,是在用户还没有登录的情况下实现启动的。换句话说,本文描述的开机启动的程序运行在Ses

2017-05-12 14:23:00 20053

原创 C/C++编程教训----'=='判断条件

程序质量保证个人谈一谈项目代码质量保证主要来源于以下几个方面:程序员的经验,防御性的避免一些错误/坑。单元测试: 单元测试应该是测试中最细粒度的测试,这个测试一般来说贯穿了整个开发以及后期维护;它能够保证到每一个函数/功能的健壮性,从而提高代码的整体质量。测试自动化: 测试自动化,应该来说至少应该包括了单元测试和功能测试自动化。 在开发或者维护过程中,在修改代码后,能够迅速的使用自动化测试进行

2017-04-22 16:47:32 993

原创 Windbg无法捕获strcpy_s crash时的函数调用栈的研究

问题描述在一年前,发现产品的windows service总是崩溃,但每次用windbg attach或者adplus产生dump,总是不能捕获到程序出错时候的栈,而且crash的时候只能看到少数甚至只剩一个线程。后来用windbg单步调试终于找到的罪魁祸首,原来是出错在strcpy_s这个函数。但是为什么直接用windbg attach或者adplus没法获取第一现场呢?当程序比较简单的时候

2017-01-22 09:46:31 1273

IP、DNS、MAC修改器VC源码

在VS2005环境下进行开发,能够对IP、MAC、DNS信息进行展示与修改,里面的不足之处还望一起讨论研究。

2012-06-15

碰撞的小球 MFC

采用VS2005 MFC 进行开发,模拟小球的控制,来躲避其他的运动的小球。

2012-06-09

九种常用排序的实现和测试源码

本文件主要实现了九种常用的排序,分别为:冒泡排序、选择排序、插入排序、自底向上的归并排序、自顶向下的归并排序、快速排序、堆排序、基数排序、希尔排序,希望对初学者有所帮助,也欢迎讨论。

2012-09-13

pop3客户端,socket编写

亲手编写,存在不足,但框架以及普通邮件能够接受成功。

2011-04-28

程序员面霸手册

该资源和程序员面试宝典类似,但是风格不同,可以配合面试宝典一起学习,祝大家找个好工作。

2012-05-18

Hadoop开发者入门专刊

方便Hadoop新手搭建Hadoop平台以及对Hadoop平台有个大概的了解,文中提到在Win下安装和Linux下安装。

2012-05-16

linux0.01源代码

学习linux,必须要有钻研精神,在linux的世界里,没有封闭,只有自由。

2009-11-30

Wirshar1.4.6开发环境搭建(win32)

对wireshark的编译,以及调试的配置(vs 2005)

2011-04-29

图书管理系统Vb版本

Vb版本的图书管理系统,由于本人写时间较长,里面数据库配置可能需要自己手动改下代码。

2012-05-18

程序员面试宝典(三)

适合本科、硕士毕业找工作,包括数据结构、操作系统、c/C++基础等内容。

2012-05-18

关于全局变量重定义的问题

发表于 2011-03-22 最后回复 2018-12-06

关于博客隐藏功能

发表于 2015-03-12 最后回复 2015-03-18

已经发表的文章变成“待审核”

发表于 2014-06-19 最后回复 2015-01-06

博客专栏审核

发表于 2014-11-11 最后回复 2014-11-11

关于vector使用编译的一个问题

发表于 2012-09-05 最后回复 2012-09-17

关于MS SQL Server恢复的问题

发表于 2012-08-31 最后回复 2012-09-01

关于句柄和内存指针的不理解

发表于 2012-07-06 最后回复 2012-07-06

关于MFC和c++标准库

发表于 2010-10-23 最后回复 2012-05-30

关于静态库的问题

发表于 2012-05-24 最后回复 2012-05-24

关于在MFC Static中画图问题

发表于 2012-05-22 最后回复 2012-05-23

还在为没有下载积分而苦恼吗?

发表于 2012-05-20 最后回复 2012-05-20

关于一个类类型的定义

发表于 2012-05-07 最后回复 2012-05-07

Ctrl+F5 与直接点击exe执行

发表于 2012-04-25 最后回复 2012-05-02

关于多线程访问安全性问题

发表于 2012-04-16 最后回复 2012-04-16

关于共享变量问题

发表于 2011-11-07 最后回复 2011-11-08

关于hook程序 WH_KEYBOARD_LL无用

发表于 2011-10-25 最后回复 2011-10-26

关于动态链接库的两个问题

发表于 2011-10-19 最后回复 2011-10-19

忘了一个c语言的api

发表于 2011-10-16 最后回复 2011-10-16

高人求解,关于dll函数调用问题(很奇怪,望高人求解)

发表于 2011-08-26 最后回复 2011-08-29

关于网络抓包测试

发表于 2011-08-01 最后回复 2011-08-01

关于定义与声明的问题

发表于 2011-07-03 最后回复 2011-07-03

关于无法加载动态连接库的问题(谢谢)

发表于 2011-06-28 最后回复 2011-06-28

关于vs2005编译选项的选择

发表于 2011-06-27 最后回复 2011-06-27

关于容器初始化问题(复制构造函数相关)

发表于 2011-06-05 最后回复 2011-06-05

关于NDIS驱动接口规范

发表于 2011-05-09 最后回复 2011-06-05

关于vs2005中makefile

发表于 2011-04-28 最后回复 2011-04-28

关于多播 , socket编程的两个问题

发表于 2011-04-20 最后回复 2011-04-26

关于tornado如何连接目标板

发表于 2011-01-22 最后回复 2011-03-22

有没有任务是否存活的函数

发表于 2011-02-24 最后回复 2011-03-16

一个编译的错误提示,看不懂

发表于 2011-02-19 最后回复 2011-02-26

vxworks引导

发表于 2011-01-23 最后回复 2011-01-24

UDP服务器如何设计

发表于 2010-12-18 最后回复 2010-12-20

关于udp服务器的设计

发表于 2010-11-20 最后回复 2010-12-18

c++友元函数

发表于 2010-11-24 最后回复 2010-11-24

socket编程之udp

发表于 2010-11-14 最后回复 2010-11-18

class AFX_EXT_CLASS CListenSocket

发表于 2010-10-31 最后回复 2010-10-31

vs2005的c++单元测试

发表于 2010-10-30 最后回复 2010-10-30

关于recvfrom的一个疑问

发表于 2010-10-23 最后回复 2010-10-23

简单的多线程创建问题

发表于 2010-10-23 最后回复 2010-10-23

socket中udp和tcp

发表于 2010-10-23 最后回复 2010-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除