约有 18 项符合查询结果, 以下是第 2 - 2项。
费时 < 1 秒。
已经解决。访问了一个已经释放的内存。
大致方法如下:
重新写一个内存分配和释放的函数,然后做记录。
分配一个内存,进行记录
释放一个,删除该记录;
源码中,在访问那个内存前,先查找记录,看该内存是否被释放了。
Posted in Windows内核调试
by
forxy
on 2010-07-28
在windows驱动中(网络中间层驱动):
1.全局的变量数组会被换页吗?
2.遇到蓝屏错误,通过分析dump文件,原因为访问了一个内存(全局数组中一个元素的链表首地址);但是windbg给出的原因有2个,一个原因是地址不合法,一个原因是高中断级别(2),访问了被换出的内存
我用 db xxxx(地址),全部显示???
请问,分析dump是否可以知道我的那个内存到底是被换出了,还是那个地址不合法。
这个蓝屏错误也不是一直都有,网络通信进行一会之后就会蓝屏。
Posted in Windows内核调试
by
forxy
on 2010-07-27
有些话如鲠在喉,不吐不快,我憋不住了。说说我身边的雷人雷事。
1.工作的时候,有人问xml文件是啥样的,最主要的是他不是新手,比我还早一年工作。
2.在一段时间之前,整个项目在linux下开发时,调试一直采用一个图形化的一个界面,好像叫KDE,根本没人使用gdb,甚至makefile文件有N个人不知道怎么写;
3.用VC开发了N年了,没有意识到动态库和可执行程序应该整个版本号,或者根本就不会;
4.用VC开发了N年,还是建两个VC工程,开2个VC,一个用于写动态库,另外一个用来调用和调试;
5.用VC开发了N年,设置头文件基本还在option中设置,工程换了台机器,没用了;
6.即使一个非常简单的技术或者是操作只要有一个人会,其他人绝对不会去学;
7 ...
Posted in 软件圈里十大怪
by
forxy
on 2010-04-27
楼上正解!
今天我特意试了一下,在类的析构函数中添加TerminalThread终止线程就可以了,我以前以为FreeLibrary会替我完成这个工作。
如果不用TerminalThread,通过procexp查看该进程,发现它的线程在不断增多。
感谢楼上回复!
Posted in WinDbg
by
forxy
on 2010-04-26
linux可以将一个服务,比如一个代理程序,做到内核中来运行,windows不知道可不可以。我想,驱动程序可以在windows内核运行,那么其他程序应该也可以。
不知道是不是这样?
Posted in Windows内核调试
by
forxy
on 2010-04-25
这是我用gdb的常用命令,其他的不会。
gdb ./test
调试test文件
l
list源码
l 37
显示37行附近的源码
b main
将断点定在main函数
b func
将断点定在func函数
b 37 if i==3
如果条件满足,在37行停止
i b
显示所有的断点
d 删除所有断点
d 0
删除第0个断点
c
继续运行
c 3
继续运行,但是3次断点忽略
display a
显示a的值(一直)
undisplay
去掉所有显示
watch ...
Posted in GDB
by
forxy
on 2010-04-25
有一个动态库,实现了一个很简单的函数:int PrintA(int a),此函数直接返回a.
但是这个动态库实现了一个类,在类的构造函数中生产一个线程进行不断的Sleep(无穷循环),并且此动态库有一个全局变量(这个类的一个全局变量)
在主程序中,通过动态加载此动态库,获取PrintA地址并调用,然后释放动态库。
循环上面的过程是程序会崩溃!
我用windbg调试(本人刚刚学,基本都不会)
发现崩溃时,eip指向一个不能访问的地址。
请问,是什么问题引起的,请问如果通过windbg来分析这个问题?
windbg可否实施这样的条件断点:
当eip指针地址无效时,
或者当eip指针指向某个固定地址时
Posted in WinDbg
by
forxy
on 2010-04-25