一个bug引起的思考

最近碰到一个bug,是在一个log模块,在使用vsprintf_s函数时发生access deny错误。奇怪的是在Debug模式下没有问题,切换到Release模式下就会重现。我把问题简单化后的代码如下:

阅读全文 »

最近遇到一个lua上问题:在一个c++工程中(进程A),执行lua脚本,由该脚本去启动一个另外的进程B。在lua脚本执行完毕时,在C++工程中调用lua_close来退出lua环境时,线程stuck在该函数中。

阅读全文 »

调用惯例(Calling Convention)是指函数调用时发生的一些约定。wikipedia定义如下:

a calling convention is an implementation-level (low-level) scheme for how subroutines receive parameters from their caller and how they return a result. Differences in various implementations include where parameters, return values, return addresses and scope links are placed, and how the tasks of preparing for a function call and restoring the environment afterward are divided between the caller and the callee.

阅读全文 »

BackgroundWorker用于在另一个线程里执行一些操作。以前经常在UI thread启动一个workder对象,去完成一个耗时操作。然后在其ProgressChanged事件的EventHandler中去更新UI. 在.net 中,创建UI control和access的线程必须是同一个线程,否则操作是非法的。在文档中可以查到在ProgressChanged的EventHandler中是可以安全的更新UI的。那么在BackgroundWorker中是如何做的呢?

阅读全文 »

最近github网站经常抽风(当然是你懂的的原因),网页上通过配置科学上网之后有所改善。但是在使用git clone时还是经常性失败。在网上找了一波解决方案,发现配置下git代理,很简单,效果立竿见影。

阅读全文 »

以前使用svn作为版本控制时,每个branch都在本地有一份代码,这样可以同时打开好多个分支。在一个分支加feature,可以很方便的另一个分支上修bug。在切换为git之后,默认所有branch都在本地只有一份copy,有的时候需要临时切换下分支,但不想提交还未完工的代码,会使用到git stash来暂存下代码。然后bug修改之后,再使用git stash pop将暂存的代码恢复过来。

但是在使用了几次git stach之后,经常会遇到一些问题:忘记pop或者pop到了错误的分支导致冲突。本文结合再v2ex上的一些回答,建议最好不要使用git stash,直接通过commit然后最后再通过git reset来回到原来的commit点,完成之后重新commit。

阅读全文 »