albert21st
驱动牛犊
驱动牛犊
  • 注册日期2006-09-27
  • 最后登录2009-09-08
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望97点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:3071回复:1

把 wrk1.2 编译成非优化版遇到的问题

楼主#
更多 发布于:2009-03-17 18:11
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 不熟,所以跟了半天代码,也没有跟出头绪,不知道有没有遇见相同问题的,帮忙解决下。
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2010-04-05 18:38
遇到了同样的问题了。
没找到解决的方法。
郁闷。
看微软的的论坛上的描述,
意思似乎是他们本来就是用优化版本来调试的,
没有使用过关掉优化的版本。
一切都是时间问题!
游客

返回顶部