阅读:1818回复:8
Softice调试问题
1。在调C驱动程序时,明明有变量,但打入Watch “变量名”时,总是Invalid Expression,不知是怎么回事
2。如何终止当前跟踪的线程?我每次用X,但它仍然继续执行 3。如何挂起当前跟踪的线程,比如我想返回Windows看看帮助什么的。 望大侠们指导。 |
|
最新喜欢:![]() |
沙发#
发布于:2002-04-05 15:44
1。因为变量还没有值的原因。
2,3禁止所有的断点。让他执行。 |
|
板凳#
发布于:2002-04-05 16:18
谢谢,可是我检查了一下,很多变量明明赋过值了。
比如如下代码:我想看看open 值,就是不行,很多也是这样 POPEN_INSTANCE open; PNDIS_PACKET pPacket; NDIS_STATUS status; NTSTATUS ntStatus=STATUS_SUCCESS; PIO_STACK_LOCATION irpSp; PVOID pMdlBuffer; PVOID pFrame; pFrame=MmGetMdlVirtualAddress(Irp->MdlAddress); //for test open = DeviceObject->DeviceExtension; // // Check to see whether you are still bound to the adapter // DebugPrint((\"Read\\n\")); IoIncrement(open); if(!open->Bound) { ntStatus = STATUS_DEVICE_NOT_READY; goto ERROR; } ....... 。 |
|
地板#
发布于:2002-04-05 17:24
编译的时候,很多变量并不一定有相应的地址空间,而可能是通过寄存器传递的 ,在你的程序里面,肯定不会有OPen变量产生,因为他直接用DeviceObject->DeviceExtension代替了open, 你可以查一查汇编看,应该是这样的。
|
|
地下室#
发布于:2002-04-05 18:08
我好象也碰到了和你一样的问题(仅限第一个问题),一般来说,SOFTICE最方便的摸过于把断点设置在函数名上了,这样一来,进入函数的时候就可以捕获,但问题是在被中断的时候,还并没有进入到函数内部的具体执行,所以任何本地变量都是看不到的,包括使用locals命令,解决办法很简单,停下来以后你在“T”,或者F8一下,然后再看你的本地变量就可以了。后面2个问题我不知道~~
不知道我对第一个问题的解释是否有一点合理性,请各位批评指正~~~ :P :P :P |
|
5楼#
发布于:2002-04-05 18:16
谢谢。:)。我查查汇编,不过我才用Softice,还不知道怎么查?我用过好几个命令,比如打a,结果下面出来不是汇编。帮我一帮!
|
|
6楼#
发布于:2002-04-05 19:44
引用:
》》》》》 1。在调C驱动程序时,明明有变量,但打入Watch “变量名”时,总是Invalid Expression,不知是怎么回事 2。如何终止当前跟踪的线程?我每次用X,但它仍然继续执行 3。如何挂起当前跟踪的线程,比如我想返回Windows看看帮助什么的。 望大侠们指导。 》》》》》 我也遇到了与1。的同样的问题。 关于2。3挂起或终止当前跟踪的线程,我觉得在!调试驱动!时,好象讲不通,不能半路挂起或终止,而只能执行完当前的。 |
|
|
7楼#
发布于:2002-04-08 16:46
谢谢。:)。我查查汇编,不过我才用Softice,还不知道怎么查?我用过好几个命令,比如打a,结果下面出来不是汇编。帮我一帮! 直接用src看啊! |
|
8楼#
发布于:2002-04-08 17:14
我想是DDK编译的问题。
编辑setenv.bat后,重新build 然后再用ice的watch命令。 遗憾的是我忘了怎么修改setenv.bat,好像是修改编译参数来着。 |
|
|