首页
社区
课程
招聘
[求助]关于调试API在不同版本操作系统下的问题
发表于: 2011-7-25 10:50 7599

[求助]关于调试API在不同版本操作系统下的问题

2011-7-25 10:50
7599
在WIN7下写了一个程序,用到了调试API,
对程序启动时产生的系统断点异常,我用DBG_EXCEPTION_NOT_HANDLED还给程序自己处理,
这么做在win7下没有问题,但在xp下运行程序时,系统报0x80000003错误,即EXCEPTION_BREAKPOINT,貌似是系统断点没有正确处理

将代码改了该,用DBG_CONTINUE告诉系统这个异常已经处理,这时没有再出问题

现在的问题是,是不是这两个系统对系统断点的处理方式不同,是不是在xp下这个系统断点必须处理,而win7下这个断点可处理可不处理?

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
只有当前程序被调试的时候,初始断点才会起作用。LZ是在调试程序嘛?
我特地找了个XP试了下,确实如此。
应该算是XP的小问题了,系统自身不处理自己抛出的异常。牛
2011-7-25 14:01
0
雪    币: 435
活跃值: (1317)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上帮忙测试,我追了下OD,遇到系统断点时,他的ContinueDebugEvent的参数为DBG_CONTINUE,所以也没有这个问题

既然OD是这么处理的那说明这么处理就是对的,但是按照我的理解,既然这个系统断点并不是调试程序设置的,调试程序也不感兴趣,那就应该用DBG_EXCEPTION_NOT_HANDLED将异常还给操作系统,win7就是这样
2011-7-25 16:14
0
雪    币: 435
活跃值: (1317)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
4
找到一点资料
EXCEPTION_DEBUG_EVENT
An exception occurs in the debuggee process. Important: This event will occur once just before the debuggee starts executing its first instruction. The exception is actually a debug break (int 3h). When you want to resume the debuggee, call ContinueDebugEvent with DBG_CONTINUE flag. Don't use DBG_EXCEPTION_NOT_HANDLED flag else the debuggee will refuse to run under NT (on Win98, it works fine).

http://win32assembly.online.fr/tut28.html
按照资料里的说法,98下DBG_EXCEPTION_NOT_HANDLED 是可以的,NT下就不行
但到了win7 又可以了

得出一个结论,对于系统在被调试进程启动时产生的这么一个断点异常,应该使用DBG_CONTINUE 标志调用ContinueDebugEvent,因为不同操作系统对这个断点的处理方式不一样
2011-7-25 16:29
0
雪    币: 38
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很不错,受教了.
2011-7-25 17:27
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
虽然如此,我还是固执的认为这是系统的Bug。,自己抛出的异常不能指望别人来揩屁股。
2011-7-26 18:42
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码