能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我觉得可以这样做,思路如下:
当$401000处断点触发之后,设置TF标志位,使程序处于单步运行状态。然后清除$401000处断点执行,这个时候在执行完$401000处的指令后系统抛出一个单步执行异常,这个异常被你的调试器捕获,然后调试器就可以清除TF标志位,将$401000处重新设置硬件断点,设置好运行环境之后将控制权交给被调程序继续运行。
我以为,这种方法比你的方法更加稳定可靠,而且不需要额外的占用调试寄存器。
|
能力值:
(RANK:260 )
|
-
-
3 楼
对,TF,先跟踪一步。
OD中当硬件执行断点被触发后就是这样的,直接按F9是不走的,需要先F7/F8一下再走。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
还有个问题啊,硬件断点只对单个线程有效吧,怎么让他对所有线程都有效呢?难道要每个线程都去设置一次?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
看来楼主连线程的概念都没有确切的搞清楚就开始写调试器了。还是先去看看操作系统的书吧。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我本来就不是搞你们这行的,我是搞艺术设计的,爱好而已
我现在要断一个程序,断不下来,我能想到的原因就2个:我代码问题、程序清空了Drx
但是调试其他程序又正常,所以排除第一个
调试我的程序发现Drx又没被清空
百度了半天只有一个搜索结果,说是因为是其他线程进行的修改,所以断不下来
自己弄个程序试了下,果然不同的线程就断不下来
|
|
|