阅读:3071回复:1
把 wrk1.2 编译成非优化版遇到的问题
Wrk1.2 的 makefile.build 中限定了对整个代码的编译采用完全优化选项(优选空间),这样一来一些局部变量就会被优化到寄存器中,在动态调试代码的时候,不方便去随意地去查看所有局部变量的值,比较费事的方法是查看汇编代码,找到存储局部变量的寄存器,再查看相应寄存器的值。这样一来,无疑是增加了看代码的时间。
所以我想把优化选项去掉,一开始我直接删除了 -Oxs,但接下来编译时便产生了错误,有几个函数找不到,有经验的人立马能够想到问题的所在,你能吗?:) 这几个函数是_BitScanForward, _BitScanReverse, abs, 它们是编译器内置的支持函数,如果你打开了 -Oi 选项,对这几个函数就可以随时调用,不用声明和定义,对于 -Oxs ,它包含了 -Oi,所以如果整个把 -Oxs 去掉,由于相应的头文件中并没有声明这几个变量,也没有.c文件定义这些变量,那么编译和链接(如果你加上原型)都是通不过的。所以应该把 -Oxs 换成-Oi。 接下来Build成功了,但是用这个非优化版的内核启动时却遇到了问题,logo 已经过去,屏幕变成灰色(我用的windows 2003 sp1)时,出现了access violation. Access violation - code c0000005 (!!! second chance !!!) nt!ExpOptimizePushLockList+0x4d: 8081ab7d 8b5114 mov edx,dword ptr [ecx+14h] 我对 push lock 不熟,所以跟了半天代码,也没有跟出头绪,不知道有没有遇见相同问题的,帮忙解决下。 |
|
沙发#
发布于:2010-04-05 18:38
遇到了同样的问题了。
没找到解决的方法。 郁闷。 看微软的的论坛上的描述, 意思似乎是他们本来就是用优化版本来调试的, 没有使用过关掉优化的版本。 |
|
|