最近遇到这个问题很多次了。
以前解决好了,就忘了怎么解决,然后问题过了,之后仍要重新翻帖子找资料,这确实是微软的BUG。娘的。
解决方法:
1、无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息格式,这里不能为『禁用』;
回:默认的Debug模式,这个就是非禁用状态。

2、项目->属性->配置属性->链接器->调试->生成调试信息,这里设为『是』;
回:Debug模式的默认值。(手抽和VS版本混乱者排除)

3、C/C++->优化->优化选择『禁用』;
回:Debug模式的默认值。(手抽和VS版本混乱者排除)

4、删除解决方案下的.ncb文件;
回:这个方法比较管用。

5、工具->选项->调试->『要求源文件与原始版本完成匹配』去掉勾;
回:这个不建议使用,不然编译出来的版本可能不是你最新的代码编译出来的。
而且你也很难找问题,强烈BS这个方法。

6、最后在上述设置的情况下,重新编译整个解决方案;
回:这个方法比较管用。

7、回过头来,检查原来的代码到底会不会被执行到

通常来说,1,2,3点出问题的可能性最大 ,实在不行 可以通过去掉和代码的完全匹配的来强制调试,但是很可能这些地方都检查之后也不能解决你的问题。

如果这些方法都不能解决问题,ctrl+A选中不能下断点的cpp或者h文件全部内容,编辑->高级->设置选定内容的格式。
一般来说清理一次符号文件和obj文件再编译就可以调试了

2009-3
21

前几天大概读了下gh0st的框架 并且编译完成 着手调试 花了两天时间成功搭建好局域网利用虚拟机作为实验目标的调试环境

1.vm 6.5 绿色版 随便下一个 装上vmtool 可以顺便开个IIS测试http上线

2.找了个2000 adv server来做虚拟机 网络模式选最简单的桥接 懒得配 做好之后建立快照以便驱动崩溃后恢复

3.打开编译好的gh0st控制端生成服务端一个 选择DNS上线 ip就填控制端主机的局域网ip即可

4.将服务端文件拖到vm机上运行 ok 能够上线了

下面来配调试环境:

1.可以就用源码里的release编译 懒得新建了 改一点参数 禁用/02优化 改为/0d 调试信息格式/Zi或/ZI均可 打开调试信息输出/DEBUG 3个工程都改好后重新编译 就能断住了

2.复制重新编译生成的服务端文件和VC8远程调试工具服务端文件(remote debugger目录)到vm机 打开x86目录下的msvsmon文件 依次选择菜单栏工具->选项->无身份验证 复选允许任何用户调试 端口默认即可

3.打开vc8 gh0st解决方案 把svchost设为默认启动项目 随便下个断点(我是搜索“文件管理” ,于是断点下到了服务端处理文件管理消息的地方)

4.vc8工具栏 依次选择->调试->附加到进程->远程->输入ip地址->回车即看到目标vm机进程

5.gh0st服务端的代码是注入svchost的 由于进程列表中有多个不好确定 可以通过控制端发送一个比较大的文件 服务端打开taskmgr 被注入代码的svchost进程CPU占用率会飙升 记住pid号 回到vc8环境中 attach上去

6.断点打好 服务端随便执行点命令 ok 断住了 慢慢爽吧:)

直接编译gh0st控制端源码会提示Cj60的一个库里面函数名找不到 估计是原来的库在VC60下编译 不匹配的问题

找到CJ60文件夹 打开 编译Cj60StaticLib库

1.报错 找不到文件<..\src\afximpl.h>

貌似从VC7开始这个头文件放在\src\mfc下 找到 stdafx.h 改之

#include <..\src\mfc\afximpl.h>

2.error C2440: “static_cast”: 无法从“UINT (__thiscall CCJControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)”

类型定义的问题 把相关参数的函数返回值改成LRESULT

3.error C2440: “static_cast”: 无法从“BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *)”转换为“BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”

宏展开后参数不匹配的问题 把NMPGSCROL改成NMHDR进子程序后强转

LPNMPGSCROL pnmpgs = (LPNMPGSCROL ) pnmhdr;

4.error C2664: “MultiByteToWideChar”: 不能将参数 5 从“USHORT *”转换为“LPWSTR”

这个是从某一版本以后 wchar_t开始变成编译器内置类型的问题 几个串类型之间不能默认转换 强转即可

接下来编译控制端gh0st

1.一上来提示找不到stdafx.h 我靠 打开header目录一看 有这个文件 ok 在附加包含目录里面加入“./”  解决了

2.error 2440 和刚才一样的问题 MFC展开宏的问题 进去强转指针即可

3.ok 到这里再编译 能通过了 刚才那一堆link错误 由于我们用vc8重新编译了cj60库也解决了 但是多出来几个link错误

nafxcw.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMT.lib(new.obj) 中定义

看意思大概是操作符在几个库里有重定义的问题 试了忽略nafxcw.lib和libcmt.lib 都不行 后翻到一篇帖子 这种问题需要在附加依赖项里面指定一下链接的先后顺序即可 先链接nafxcw.lib 后链接libcmt.lib 如果编译调试版在库后面加个d

好了 甩个服务端到虚拟机上去 咱们开始调试吧

参考文献:

http://topic.csdn.net/t/20030627/23/1966751.html

operator new 链接重定义的问题

http://blog.csdn.net/orbit/archive/2008/11/28/3405309.aspx

从VC6到VC9移植代码问题总结

2008-12
11
发表于: 二十三十 | 执笔: freshbug
关键字: ,

从上海辞职回来已经大半年了,成都的感觉真好。

因缘际会做到了喜欢的游戏行业,想做的,做到了,这就是最大的幸福。

下班,骑着小车回家,路边都是臭豆腐摊子,老地方停下来吃了几个蛋烘糕,土豆丝的,豇豆的,芽菜的。

骑了一段,发现卖锅盔的婆婆今天尽然没收摊,冲上去要了两个,排在后面的哥们搞定了最后两个,话说平时这个小摊的顾客都是20个20个的买,那个汗啊。

回家,做做逆向,吃饭,洗澡上床,敲两行代码,直到深夜,要是不爽,还可以鼓捣老爸陪着出去喝啤酒吃烧烤。

周末,朋友,烫火锅,烫羊肉,陪老妈逛家具市场。

没有压抑,没有孤独,再没有看不到奔头的日子,今天下午的太阳真暖和。

2008-11
22

VA的快捷键注释很好用,但默认的几种注释风格有一些单调,在开发中经常需要针对建立文件,修改,合并等不同动作进行不同注释。

笔者在编辑注释模板时遇到一些展开宏的名字不甚清楚,查阅了下列官方文档后解决问题。

文档中的宏定义:

Code

Reserved String Meaning
Date $DATE$ Year/month/day formatted as %04d/%02d/%02d
$DAY$ Day of month formatted as %d
$DAY_02$ Day of month formatted as %02d
$DAYNAME$ Three-character abbreviation of day
$DAYLONGNAME$ Full name of day
$MONTH$ Month formatted as %d
$MONTH_02$ Month formatted as %02d
$MONTHNAME$ Three-character abbreviation of month
$MONTHLONGNAME$ Full name of month
$YEAR$ Year formatted as %d
$YEAR_02$ Year formatted as %02d
File $FILE$ Full filename with path*
$FILE_UPPER$ Full filename with path in uppercase*
$FILE_BASE$ Filename without path or extension*
$FILE_BASE_UPPER$ Filename without path or extension in upper case*
$FILE_EXT$ Filename extension*
$FILE_EXT_UPPER$ Filename extension in upper case*
$FILE_PATH$ Path of file*
$FILE_PATH_UPPER$ Path of file in upper case*
General $clipboard$ Current clipboard
$end$ Position of caret after expansion
$selected$ Current selection**
$$ $
GUID $GUID_DEFINITION$ Generated GUID formatted for use in a definition
$GUID_STRING$ Generated GUID formatted for use in a string
$GUID_STRUCT$ Generated GUID formatted for use in a struct
(Note that all instances of GUID reserved words will use a singe generated GUID.)
Refactor $GeneratedPropertyName$ Property name generated during Encapsulate Field
$MethodArg$ One parameter of the method and its type
$MethodArgName$ One parameter of the method
$MethodArgType$ Type of one parameter of the method
$MethodBody$ Body of implementation
$MethodQualifier$ Optional qualifiers of method
$ParameterList$ Parameters separated by commas
$SymbolContext$ Context and name of method
$SymbolName$ Name of method
$SymbolPrivileges$ Access of method
$SymbolStatic$ Keyword static or blank
$SymbolType$ Return type of method
$SymbolVirtual$ Keyword virtual or blank
Time $HOUR$ Hour formatted as %d
$HOUR_02$ Hour formatted as %02d
$MINUTE$ Minute formatted as %02d
$SECOND$ Second formatted as %02d

例子:

/****************************************************************
// FileName: $FILE_BASE$.$FILE_EXT$
// Author: freshbug
// Create: $MONTH$-$DAY$-$YEAR$
// Company: fresh-lab
// Checked: freshbug $MONTH$-$DAY$-$YEAR$
****************************************************************/

效果:

/****************************************************************
// FileName: BufferServerMsg.h
// Author: freshbug
// Create: 11-22-2008
// Company: fresh-lab
// Checked: freshbug 11-22-2008
****************************************************************/

原文连接请看这里:http://www.wholetomato.com/products/features/vasnippets.asp