windows工作vim+vindbg+vs2008devenv.com
2015-07-20 15:20
211 查看
工作环境从vc6转到vs2008了,很多时候非常慢,因此想尝试另外一种工作方式:console+devenv.com+windbg+vim
打算用gnu下面的find和grep,但是windows有find命令,于是想把windows\system32下面的find.exe删掉,结果发现删掉自己又出来了,于是又试着替换掉,结果发现又自动替回去了,windows真牛,最后还是把gnu-find改名为gfind。
编译*.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。
查看类成员 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以后好像都加载符号,估计是本地保存了信息,但是不知道保存哪里了,导致慢的原因最后发现是在程序启动的一个地方设置了一个断点,导致一上来就尝试加载所有模块的符号,将那个断点删掉就好了
终端
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以后好像都加载符号,估计是本地保存了信息,但是不知道保存哪里了,导致慢的原因最后发现是在程序启动的一个地方设置了一个断点,导致一上来就尝试加载所有模块的符号,将那个断点删掉就好了
相关文章推荐
- Java计算器
- Nhibernate 三种配置方式
- BZOJ3997: [TJOI2015]组合数学(网络流)
- Poj 1236 Network of Schools (Tarjan)
- 如何把xshell的session配置文件拷贝到别的机器上
- oracle 存储过程 游标
- html select
- EF的CRUD
- Android_关于Toast重复显示解决方法
- 【MySql】赶集网mysql开发36条军规
- [DLX] hust 1017 Exact cover
- 杭电 2000 ASCII码排序
- Aladdin and the Flying Carpet
- 深入解析AsyncTask(doInBackground不工作)
- Noip2012 普及组 第三题 摆花
- 学习设计模式的前世今生
- Java基础—网络编程
- BAT内推之阿里内推介绍
- 【shell脚本】ftp自动上传mysql备份文件
- 程序员辞职/跳槽的理由,亮点总在最后!