您的位置:首页 > 其它

windows工作vim+vindbg+vs2008devenv.com

2015-07-20 15:20 211 查看
工作环境从vc6转到vs2008了,很多时候非常慢,因此想尝试另外一种工作方式:console+devenv.com+windbg+vim

终端

windows下面cmd很难用,但是有很多好用的终端,ConEmu是目前发下最好用的,功能强大。

打算用gnu下面的find和grep,但是windows有find命令,于是想把windows\system32下面的find.exe删掉,结果发现删掉自己又出来了,于是又试着替换掉,结果发现又自动替回去了,windows真牛,最后还是把gnu-find改名为gfind。

编译

代码的编译采用vs2008提供的工具即可

编译*.sln

devenv d:\Build\MyProject\Src\MyProject.sln /Build "Release|Win32"

其他开关还有 /Clean /Rebuild

使用devenv来build一个.sln中的某个的实例:

devenv.exe d:\Build\MyProject\Src\NyProject.sln /build "Release|Win32" /Project MyProject1

注意:通常地.sln中的多个Projects间有依赖关系,所以虽然你只是build一个.sln中的某个Project,但是还是需要指定Project所在.sln,然后通过/Project来指定Project的名字。

如果只是单个的Project,没有引用其他的projects,这个时候可以不指定.sln,直接build Project,如下实例:

devenv d:\Build\MyProject\Src\MyProject.vcxproj /Build "Release|Win32"

注意此时实际上devenv做如下事:

此时devenv将在此project文件的父目录中查找与Project相同名字的.sln;

如果没有找到的话,然后查找其他的引用了此Project的.sln;

如果还是没有找到的话会创建临时的不保存的与Project同名的.sln。

调试

设置断点 bp `Game.cpp:235' 如果设置失败,可能是源文件还没有加载,重新加载下
查看类成员 dt -R this 递归查看类成员变量值
设置当前栈:
kn会显示栈信息并显示编号
.frame 1 切换到目标栈
??this->m_var 可以查看类成员值
问题

临时解决

符号表设置了没法正确加载

查看类成员变量 可以打开windbg的watch窗口查看

查看栈中某个位置变量信息 可以打开windbg的watch、calls窗口查看

this指针通常保存在ecx中,通过命令 r ecx可以查看其地址,然后 dt CECGame 01a45760 可以查看this值

?? (MyClass*)@ESI

windbgworkspace信息保存在HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces

事后调试

最好的方式当然是建立符号服务器,以后研究下,现在采用下面简单方式:

将每次编译版本保存在不同目录

通过 lmvm gameclient查看Timestamp,找到对应符号

用windbg打开dmp文件

.sympath 对应符号路径

!analyze -v

未解决

watch窗口慢,有时候设置断点慢

windbg启动调试慢,每一个ModLoad以后好像都加载符号,估计是本地保存了信息,但是不知道保存哪里了,导致慢的原因最后发现是在程序启动的一个地方设置了一个断点,导致一上来就尝试加载所有模块的符号,将那个断点删掉就好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: