11 月 2010

Visual Studio下的C++程序断点windows api调试的方法

就当是个记录吧,收藏夹多了也不好找。
以前抄过一个利用dbghelp api来进行release版调试跟踪的工具类,就是当release版exe在客户机上异常后记录堆栈,局部变量,寄存器值等的东西。突然发现一个小问题需要断点调试检查,但发现这个在挂着调试器的时候就不起作用了,google发现这篇文章:
http://www.debuginfo.com/articles/debugfilters.html
大概意思看明白了,结果文中提到的下windows api断点的部分不知道怎么做,继续google发现MSDN上有大致说明:
http://msdn.microsoft.com/en-us/library/d16ayc6z.aspx
手动添加断点的location要这样:{,,USER32.DLL}_MessageBeep@4,用起来还是比较麻烦的,因为还要涉及到api的dll中导出decorated name,不过至少是能用了,知足常乐。
PS:注意这个提到的是32bit系统下,而且调试时需要导入这些加在的系统dll的调试符号,好在发现VS2010有个Load symbols from microsoft symbol servers,虽然下载慢了点不过还是挺方便的。

支持C++标准库的Android NDK CrystaX!

最近在研究Box2D物理引擎在Android上的应用时,发现直接用NDK移植C++版本时遇到了一些STL库的问题,类似b2BroadPhase.h中的:
// Sort the pair buffer to expose duplicates.
std::sort(m_pairBuffer, m_pairBuffer + m_pairCount, b2PairLessThan);
这里,其它地方通过直接替换标准c函数还好解决,这种需要STL库的用法就不好办了。在Box2D的论坛上发现有人提到有个叫CrystaX的第三方版本的NDK,整合了C++标准库,可以直接在不修改任何源码的情况下编译Box2D!
下载地址:http://www.crystax.net/android/ndk.php