重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在Go语言中有一些调试技巧能帮助我们快速找到问题,有时候你想尽可能多的记录异常但仍觉得不够,搞清楚堆栈的意义有助于定位Bug或者记录更完整的信息。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的广饶网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
本文将讨论堆栈跟踪信息以及如何在堆栈中识别函数所传递的参数。
Functions
先从这段代码开始:
Listing 1
01 package main
02
03 func main() {
04 slice := make([]string, 2, 4)
05 Example(slice, "hello", 10)
06 }
07
08 func Example(slice []string, str string, i int) {
09 panic("Want stack trace")
10 }
Example函数定义了3个参数,1个string类型的slice, 1个string和1个integer, 并且抛出了panic,运行这段代码可以看到这样的结果:
Listing 2
Panic: Want stack trace
goroutine 1 [running]:
main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:9 +0x64
main.main()
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:5 +0x85
goroutine 2 [runnable]:
runtime.forcegchelper()
/Users/bill/go/src/runtime/proc.go:90
runtime.goexit()
/Users/bill/go/src/runtime/asm_amd64.s:2232 +0x1
goroutine 3 [runnable]:
runtime.bgsweep()
/Users/bill/go/src/runtime/mgc0.go:82
runtime.goexit()
/Users/bill/go/src/runtime/asm_amd64.s:2232 +0x1
堆栈信息中显示了在panic抛出这个时间所有的goroutines状态,发生的panic的goroutine会显示在最上面。
Listing 3
01 goroutine 1 [running]:
02 main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:9 +0x64
03 main.main()
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:5 +0x85
第1行显示最先发出panic的是goroutine 1, 第二行显示panic位于main.Example中, 并能定位到该行代码,在本例中第9行引发了panic。
下面我们关注参数是如何传递的:
Listing 4
// Declaration
main.Example(slice []string, str string, i int)
// Call to Example by main.
slice := make([]string, 2, 4)
Example(slice, "hello", 10)
// Stack trace
main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
这里展示了在main中带参数调用Example函数时的堆栈信息,比较就能发现两者的参数数量并不相同,Example定义了3个参数,堆栈中显示了6个参数。现在的关键问题是我们要弄清楚它们是如何匹配的。
第1个参数是string类型的slice,我们知道在Go语言中slice是引用类型,即slice变量结构会包含三个部分:指针、长度(Lengthe)、容量(Capacity)
Listing 5
// Slice parameter value
slice := make([]string, 2, 4)
// Slice header values
Pointer: 0x2080c3f50
Length: 0x2
Capacity: 0x4
// Declaration
main.Example(slice []string, str string, i int)
// Stack trace
main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
因此,前面3个参数会匹配slice, 如下图所示:
Figure 1
figure provided by Georgi Knox
我们现在来看第二个参数,它是string类型,string类型也是引用类型,它包括两部分:指针、长度。
Listing 6
// String parameter value
"hello"
// String header values
Pointer: 0x425c0
Length: 0x5
// Declaration
main.Example(slice []string, str string, i int)
// Stack trace
main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
可以确定,堆栈信息中第4、5两个参数对应代码中的string参数,如下图所示:
Figure 2
figure provided by Georgi Knox
最后一个参数integer是single word值。
Listing 7
// Integer parameter value
10
// Integer value
Base 16: 0xa
// Declaration
main.Example(slice []string, str string, i int)
// Stack trace
main.Example(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa)
现在我们可以匹配代码中的参数到堆栈信息了。
Figure 3
figure provided by Georgi Knox
Methods
如果我们将Example作为结构体的方法会怎么样呢?
Listing 8
01 package main
02
03 import "fmt"
04
05 type trace struct{}
06
07 func main() {
08 slice := make([]string, 2, 4)
09
10 var t trace
11 t.Example(slice, "hello", 10)
12 }
13
14 func (t *trace) Example(slice []string, str string, i int) {
15 fmt.Printf("Receiver Address: %p\n", t)
16 panic("Want stack trace")
17 }
如上所示修改代码,将Example定义为trace的方法,并通过trace的实例t来调用Example。
再次运行程序,会发现堆栈信息有一点不同:
Listing 9
Receiver Address: 0x1553a8
panic: Want stack trace
01 goroutine 1 [running]:
02 main.(*trace).Example(0x1553a8, 0x2081b7f50, 0x2, 0x4, 0xdc1d0, 0x5, 0xa)
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:16 +0x116
03 main.main()
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:11 +0xae
首先注意第2行的方法调用使用了pointer receiver,在package名字和方法名之间多出了"*trace"字样。另外,参数列表的第1个参数标明了结构体(t)地址。我们从堆栈信息中看到了内部实现细节。
Packing
如果有多个参数可以填充到一个single word, 则这些参数值会合并打包:
Listing 10
01 package main
02
03 func main() {
04 Example(true, false, true, 25)
05 }
06
07 func Example(b1, b2, b3 bool, i uint8) {
08 panic("Want stack trace")
09 }
这个例子修改Example函数为4个参数:3个bool型和1个八位无符号整型。bool值也是用8个bit表示,所以在32位和64位架构下,4个参数可以合并为一个single word。
Listing 11
01 goroutine 1 [running]:
02 main.Example(0x19010001)
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:8 +0x64
03 main.main()
/Users/bill/Spaces/Go/Projects/src/github.com/goinaction/code/
temp/main.go:4 +0x32
这是本例的堆栈信息,看下图的具体分析:
Listing 12
// Parameter values
true, false, true, 25
// Word value
Bits Binary Hex Value
00-07 0000 0001 01 true
08-15 0000 0000 00 false
16-23 0000 0001 01 true
24-31 0001 1001 19 25
// Declaration
main.Example(b1, b2, b3 bool, i uint8)
// Stack trace
main.Example(0x19010001)
以上展示了参数值是如何匹配到4个参数的。当我们看到堆栈信息中包括十六进制值,需要知道这些值是如何传递的。
1、首先去百度搜索VB Decompiler Pro软件下载到电脑文件家夹里。
2、我们双击打开上图所示下载的软件,打开注册之后点击“Activate”按钮。
3、提此时界面上会提示注册成功,我们点击确定,就可以打开VB Decompiler Pro主程序了。
4、然后我们进入软件主界面,点击界面上方菜单栏里的File选项目录下的Open program选项打开我们想要打开的DLL文件。
5、我们可以按路径查找到我们想要打开的DLL文件选中打开即可。
6、此时VB Decompiler程序会自动进行反编码并完成。
7、现在就可以进行DLL文件Code的查看修改或编辑了,重新生成DLL即可。
想要知道取反计算过程,首先搞懂 “原码“,“反码”,“补码”,“取反”。
0变1,1变0
原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值。原码表示法在最高位为符号:正数该位为0,负数该位为1,原码又称带符号的绝对值。看整数9及-9的原码如下:
9的原码:0000 1001
-9的原码: 1000 1001
重点:对于源码,绝对值相等的正数和负数只有符号位不同。
反码通常是用来由原码求补码或者由补码求原码的过渡码。正数的反码就是其原码,负数的反码就是将原码除符号位以外每位取反(0变1,1变0)。例如:
9的反码:0000 1001
-9的反码:1111 0110
在计算机系统中,数值一律用补码来表示和存储。正数的原码就是其补码。负数的补码是其反码+1.例如:
9的补码:0000 1001
-9的补码:1111 0111
正整数的原码、反码、补码都是一样的。负数的反码是除符号位其他每一位取反,负数的补码是其反码+1
首先明确一个概念,由于在计算机中二进制都是以其补码形式存放在内存中的。所以要知道 ^9 就是对 9 的补码取反,也就是说无论是整数还是负数对其取反都是对其补码取反。
正数9:
原码为: 0000 1001
反码为: 0000 1001
补码为: 0000 1001
1. 取反结果=负数补码 :0000 1001 --- (取反) 1111 0110
注:由于 ^ 位取反操作符,对于符号位也会取反 所以这里得到一个负数的补码,想要计算其真实的值。还需要将其转换成原码。
2. 得反码:1111 0110 - 1 = 1111 0101
补码 = 反码 + 1 (反推) 反码 = 补码 - 1
3. 得原码 1111 0101 -- 1111 1010 = -10
原码 = 反码取反
负数-9:
原码为: 1111 1001
反码为: 1111 0110
补码为: 1111 0111
1. 取反结果=正数补码 1111 0111 ---- 0000 1000
2. 正数原码 = 反码 = 补码 = 0000 1000 = 8
如何学好英语
如何学好英语,提高英语水平,是当前很多中学生困惑的问题。其实,学好英语并不是一件难事,关键在于要掌握好的学习方法。学习方法自然是因人而异、因时而异的。其实方法本身无所谓好与坏,关键就看它能否完美地与 个人相结合,提高学习效率,如果一套方法能够激发你的学习兴趣,提高学习效率的话,以后要做的就是坚持下去。可能我们都见过类似的情况:有的人整日埋头书案,学得很辛苦,但成绩仍不理想:有的人则懂得“有张有弛”,学得很轻松,而且名列前茅。如果你是后者,相信你已经找到了良好的学习方法与你个人的最佳结合点了,只要持之以恒即可;而前者已经具备了一定的毅力,关键就在于提高自己的学习效率了。
学好英语的另一个关键是提高英语学习的兴趣。爱因斯坦说过“兴趣是
最好的老师”。兴趣是产生学习的动力。那如何产生学习的兴趣呢?当然你必须要学会英语、懂得英语、会在生活实践中运用你所学习的英语知识。你懂得越多你的兴趣就会越浓。首先,你必须有足够的词汇量,有坚实的语法知识。
一、词汇
词汇是学好英语的关键,没有足够的词汇就无从谈起听、说、读、写。
词汇量的大小决定一个学生英语水平的高低。因此在初中阶段除要掌握《大纲》要求的800多词汇外,还要扩充500个左右的词汇。在学习词汇的过程中,要掌握词的拼读规则,根据规则记忆单词;同时还要根据构词法知识记忆和扩充单词,通过语境理解和记忆单词也是一个最佳学习单词的好方法。目前词汇在中考试题中汉译英的试题越来越少,取而代之的是词汇在语境中的运用考查比重越来越大。在进入学习英语的初级阶段时,掌握语音知识是学好英语单词的基础,读准英语音素是拼读音标的前提。因此一定要熟练掌握48个音素,要做到会拼读、拼写。有些同学认为中考试题的笔试部分取消了对语音的考查,于是就其次,要注意训练自己听音、辨音和模仿的能力。课堂上,专心听老师的发音和磁带上的录音,争取当堂学会。对于那些比较拗口的单词、短语或句子,课下一定要挤时间反复模仿,直到读准、读熟为止。再次,熟练掌握读音规则,培养自己根据读音规则把字母(或字母组合)与读音建立起联系的能力。因为掌握拼读规则对单词的记忆很有好处。为此要经常复习巩固每单元最后一课的“Listen,read and say”和课本附录中的"Pronunciation and spelling”,如果不重视这些内容。我觉得这可是很大的缺撼。如果谁能够熟练掌握它,它可就成为你记忆单词的好帮手了。
说到记忆单词,这可是同学们普遍感到头疼的事。尤其是现行的新教材词汇量扩大了不少,记忆的难度就更大了。记不住单词,学好英语就无从谈起。所以突破单词这一难关非常关键。记忆单词的方法很多。
1.按读音记忆单词。实际上在你看单词时就要顺便看一眼音标,掌握字母及字母组合的读音规律。将所有符合规则的单词归类记忆。如:①按开、闭音节记忆,掌握元音字母的读音。Bag: cat, map, sad;cake: name, plane, date; desk: next, set, step, let; these: Chinese, Japanese; hit: big, ship, this, kill; like: side, nice, kite,mine ; not: dog, hot, stop, got; nose: note, those, close, hole ; bus: nut, cup, rubber, dust; use: huge等。②按字母组合记忆,掌握元音字母组合和辅音字母组合的读音,如:
bee, meet, see, keep等等,ee字母组合读/i:/;chair,
ch字母组合读/tS / 。
2.分音节记忆。单词不论长短,如果从第一个字母背到最后一个字母,是
很难记忆的。如:information,共11个字母组成,可以把它“大卸八
块”,分音节记忆就会很容易。in-for-ma-tion
3.音、形、义结合法
背单词将它的音、形、义结合起来,记忆牢固,速度也快。读准它的
音,看好它的形,明白它的义,尤其是一词多义,记忆时要提高分辨率。
如:orange是个兼类词,作可数名词意思是“桔子”;作形容词意思是
“桔色的”;作不可数名词意思是“桔汁”。可读音只有一
个/'orindJ/,词形一样。这样有意识地去分辨记忆就容易多了。
4.联想记忆来记单词。它主要包括以下几种形式:
① 对比联想记忆:
将同义词: study/learn(学习),big/large/great(大的),look/
see/watch(看),hear/listen(听),good/fine/well/
nice(好的), door/gate(门),like/love/enjoy(喜欢)等。
反义词: 如:big(大) →small(小),dear(昂贵) →cheap(便宜),hot
(热) →cold(冷),slow(慢) →quick/fast(快),thin(瘦)
→(胖),in front of(在……前面) →behind(在……后面),
south(南) →north(北)等。
同音词: too(也) →two(二),for(为) →four(四),right(正确) →
write(写),by(乘) →buy(买),blue(蓝色的) →blew(blow
的过去式),sea(海洋) →see(看见),son(儿子) →sun(太
阳), whether(是否)→weather(天气)
词形相近比较:want(想要)→wait(等待),read(读)→ready(准备好
的),wall(墙) →walk(走),quite(很)→quiet(安静的),
present(礼物)→parent(父母)等放到一起对比记忆。
同时还可以联想到一些义同形不同的词。如:由cost联想到pay,take和spend,并将这些意义相对、相同或读音相同的词的用法进行比较。
②归类联想记忆:把所学的单词按照不同的范畴分门别类, 将所学单词合理归类。
A.按词性归类。如:名词driver, name…,动词be, have, drive…,
形容词careful, happy…,副词carefully, happily…,介词in,
on at…,代词he, she, him, her…等。
B.按用途归类。如:服装类coat, shirt, skirt, sweater,
shoes…,食品类cake, rice, dumpling, noodle…,运动类
football, basketball, race, sport…,交通类traffic, bus,
car, taxi, train, plane, ship…,月份January, February,
March, April…,星期Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday和节日等。比如学习
Christmas一词时, 就联想到Children's Day,Women's Day,
Teachers’Day,Tree—Planting Day,Mid—autumn
Festival,National Day, New Year’s Day, Spring
Festival等一系列的节日名词。
③构词联想记忆:利用同根词(词形转换)联想记忆,注意词性。英语单
词中有许多词具有一词多性的特点,如open既可作动词用,又可作
形容词用。另一些词具有同一个词根,如单词care既具备名词性质
又具备动词性质,它的同根词有careful,carefully,careless,
carelessly,对于这些词,我们应重点记忆。再如:north→
northern,noise→noisy→noisily等。利用合成词联想记忆,如
学到moonlight这个词就想到它是由moon和light这两个词合成
的;classroom是由class与room合成的。
④搭配联想记忆:以一个单词为中心搭配不同的词而构成新的短语。这种语言现象非常多,如能经常使用此法则会牢固地记住所学的短语。如:
1)含有get的短语有:get ready for 为…… 做准备,get up 起 床,get on, with 与人相处,get down下来, get dressed穿衣服,get back取回;回来,got on 上车,get off下车,get to 到达,get out of从……出来, get lost迷路。
2)含go的短语有:go swimming去游泳, goes on继续;持续, go to school去上学, go to bed上床睡觉, goes home回家, go out for a walk出去散步, go away走开, goes down降落,go back回去, go on with继续做某事
3) 含look的短语有:look at 看, 1ook after照看;照顾, look the same 看起来很像, 1ook like看起来像, 1ook for寻找, 1ook up(在词典、参考书中)查找, 1ook over (医生)检查, 1ook around (round)环顾四周
4)含make的短语有:make room for 为……. 让地方, make sentences with 用……造句, made a face or made faces 做鬼脸, be made in在…制造 , be made of由…制成, make tea沏茶, make friends with 与……交朋友, make up编出, made a mistake出差错, make sure确保,确信, make a noise吵闹
5)含take的短语有:take your time 不急;慢慢来, take, medicine 吃药;服药, take a walk 散步,take, exercise 运动, take turns 轮流;替换, take care of 照料;照顾, take, out of 带走;拿出, taking off 脱掉, take a message for 给……捎个信
6)含come的短语有:came into 进来, come down 下来, come in 进来, come over 过来,come from 来自, come back 回来, come round 前来(过来)/ comes over, come on 快,加油, come out (花)开;出来, come along 赶快,快一点
7)含turn的短语有:turn off 关上, turn, up (把收音机等)开大一些, turn on 打开(灯等), turn down (把收音机等)开小一些, turned white 变白, turn left 向左拐。
8)含have的短语有: have to 不得不, have an idea 有了主意, have a rest 休息, have breakfast吃早饭, have a look 看一看, have a good time玩得愉快, had better 最好,have a drink of 喝一点儿
只要你多留心,有意识地注意归纳总结,记忆单词和短语不是一件难事。
此外,老师课堂上播放朗读带,不只是单纯地听,而是一边听一边迅速地将
其写下来,做到耳、心、手、眼并用。总之,对于那些新近学的单词,要不厌其
烦地靠读、写、背等各种途径反复记忆。重复到一定的次数,就会成为长时间的
记忆,也就不会遗忘了。
(5)记忆单词还要靠勤奋,抓住零散时间进行记忆。记忆单词时,除了
以上方法外还要做到“五到①脑到—背单词时肯定要想着,不能开小差。
②眼到—仔细观察单词的写法。③口到—口里要念着单词。④耳到—听着
自己的读音。⑤手到—用手在书桌上或纸上写几遍这个单词。不要偷懒,
一定要边记边壁划。把各个器官动用起来,相信自己一定能记住更多的单
词。
有的同学认为单词的识记真很麻烦。其实并不麻烦。如果你能经常有意识
地这样做,时间久了,就会养成习惯。以后每遇到一个词就会不知不觉地去联
想。
一位外语专家曾经说过这样一句话:“千个单词至少在你眼前出现二十次
才能牢记。”同学们想想看,你所学的单词总共在眼前出现过多少次?这下你
也许找到记不住单词的原因了吧?
(6)学好英语做好课前预习和课后复习也是十分重要的。
你应该在每学习一课之前,先进行预习。预习可以提前扫清听课中的障碍。
通过预习,就像“火力侦察”,可以发现自己知识上的薄弱环节。在上课前迅速
补上这部分知识,这样,在理解新知识时就会很顺利。有的学生听讲效果不好,
其中一条主要原因,就是没有搞好预习。课前预习是学生学好新课,取得高效率
的学习成果的基础。如果搞不好课前预习,上新课时就会心里没底,听课就会变
得被动、难以消化,以致对全部接受新课丧失信心。反之如果做好了课前预习,
不仅可以提前扫清听课中的障碍,培养自学的能力,而且可以提高学习新课的兴
趣,掌握学习的主动权。
首先,熟悉并能记住大部分生词。校正单词读音。在了解了生词的基本
意思和词性用法后,应及时听课文录音磁带,一般情况下,要连续听2—3
遍,并跟着大声读,目的是校正生词读音,并且模仿朗读课文的语音语调,
提高说的能力。用这种方法校正单词读音,还可增强语感。
在自学时,你会经常遇到疑难问题?你是如何处理的?
当然。每遇到这种情况,首先是自己要认真地去思考,多角度地分析、推
敲。要知道,若是自己费尽了一番周折将某个难题弄个水落石出,那心里可真是
一种说不出的痛快。如果实在搞不清,你可以向老师或同学请教,绝不轻易放过
任何一个疑难问题。
二、语法
语法是学好英语的基础,它是掌握英语的工具。在你掌握了一定的词汇量
后,了解一些语法知识是非常必要的。选择填空是考查语法的一个重要题型。
它可以通过选择的方式考查名词、动词、代词、形容词、副词、连词、介词和
数词等等。覆盖面较广。
初中阶段所学的语法知识就是那么屈指可数的几个,反复练习过多遍,为什
么到头来还是出错呢?
这种一错再错的现象在学生中是普遍存在的,即某个题目在以前曾做错过,
以后再次见到这个题,还是做不对甚至犯同样的错误。我觉得问题的关键在于没
有彻底弄懂错误的原因或没有引起足够的重视。你应该把做错的每一道题,都要
进行认真、仔细的分析和思考:错在哪里?是对该知识点不了解还是粗心大意所
致?如何改正?怎样才能避免类似错误的发生?是否还有其它的解法?经过这一番反
思之后,再把它们记录到“错题库”中去。以后再碰到类似题目就基本上可以杜
绝错误的发生。尤其是那些易受思维定势影响的题目更应当这样去处理,否则就
很容易重蹈覆辙。
时态学习是中国学生最为头疼是一项语法项目。因为中国人在语言的表达中
只有时间的变化,而没有时态的概念,但英语中语言所表述的事情处在不同的时
间,要用不同的时态,而且时态的关键表述在句子的谓语动词上。有时背起规则
来很容易,但在句子的使用中却常常出现错误。
要准确地掌握初中阶段的五个基本时态,重要的还是要在句子中多运用。
1.掌握连系动词be,feel,look,get,turn等与表语连用的一般用法。
2.掌握延续性动词与瞬间动词在用法上的区别。
这类动词主要体现在过去时和完成时态中。
一、在现在完成时中延续性动词可与表示一段时间的介词短语for或since连用,而终止性动词的现在完成时则不能与一段时间连用。如:
I have bought this dictionary for three years.
这本字典我已买三年了。(误)
上句中的bought(buy的过去分词)是终止性动词,它不能与表示时间段
的短语连用,若要连用,就必须改变结构,可变为:I have had this
dictionary for three years.因此在学习中要注意归纳终止性动词变为
延续性动词。常见的终止性动词与延续性动词的转换有come→be here,
begin/start→be on,borrow→keep, buy→have,die→be dead,
end/finish→be over,get up→be up,go(get)out→be out, fall
asleep→be asleep, leave→be away from, join→be in/be a
member of,put on→wear,catch a cold→have a cold等。
3.掌?罩??蔰o,will,shall,have,be在句中的作用。归纳时态,记住其结构。
4.掌握行为动词speak, write, read…在句子中时态变化的形式。
《大纲》中要求掌握的五个基本时态。理解各种时态的概念,掌握在句中的
结构和提示时态的时间状语。同时还要理解其他的三种时态“过去进行时、过去
将来时、过去完成时”。
下面将五个基本时态列表如下:
时态
时间
结构
一般
现在时
often, usually, always, sometimes, every day (week…),
on Sunday
He/She/It+动词s
I/We/You/They+动词原形
一般
过去时
yesterday, … ago, last week,
in 2001
主语+动词的过去式
现在
进行时
now
主语+be+ 现在分词
现在
将来时
tomorrow, next week
主语+will/be going to+动词原形
现在
完成时
already, yet, ever, never, for+一段时间, since+时间起点
He/She/It has+过去分词
I/We/ You/They have +过去分词
动词在语言交流中是十分重要的,语法只是学好英语的工具,利用这个工具可以提高自己的自学能力。在理解时态的过程中要注意上下句或前后语境的提示。要注意动词的基本变化。
①例1:(2003 北京市)
②---What are Mr and Mrs Black doing?
③---They _______ tea in the garden.
④A. are drinking B. drank C. have drunk D. drink
⑤【解析】
⑥此题考查现在进行时。
⑦从上句语境分析得知动作就发生在此时此刻,找准动词部分的结构,排
除干扰,得出正确答案。该句的问句在问“布莱克夫妇正在干什
么?”,回答应是“现在正在……”,现在进行时的结构是“be(am,is,
are)+现在分词”。
⑧例2(2003 重庆市)
⑨---I don’t know if his uncle___________.
⑩---I think he _________if it doesn’t rain.
A.comes;comes B.will come;will come
C.comes; comes D.comes; will come
【解析】
本题考查了两种时态在语境中的应用。先分清if引导的是个什么从
句,再根据语境确定各自的时态。第1空if在及物动词之后引导宾语从
句,意思是“是否”,该句的主句是一般现在时,宾语从句的动作还没有
发生,用将来时;第二个空if引导是条件状语从句,条件从句用一般现在
时,主句的谓语动词用将来时。
三、交际
《大纲》指出“使学生掌握一定的语言基本知识和基本
技能,建立初步的语感,获得初步运用英语的能力,为真实交际
打下基础”。学习语言的关键在于运用。同学们是否注重自己英
语,口语的练习呢?我们没有说外语的环境,但要尽量创造。每天
早上起床后,应该是先读上至少5分钟英语。大声朗读不仅可以练
习发音,形成良好的语感,而且对听力的提高也有着不可低估的
作用。另外,我们还要利用一切可能的机会用英语和同学、老师
或者其它懂英语的人打招呼或谈论事情。碰到生词,就汉英夹杂
着说。一开始,可能不太习惯,但没有关系,只要坚持就会有结
果。前苏联语言学家巴乌利•阿里斯德教授能流利地讲十五种外
语。他说:“我只要学会了100个单词,就立即用这种语言讲话。
一个怕出错的人永远也讲不了地道的外语。”看来,要想练好口
语,真要有“厚着脸皮,磨破嘴皮”的精神才行。
四、阅读
1.你是如何培养阅读能力的呢?
阅读理解难度较高,必须在有了充足的词汇的基础上才能进行阅读训练。它
是检查你英语学习水平的高低的重要标志。你是否在阅读上花了不少的力气呢?
要想提高阅读水平,除了学习课本外,必须在课外有意识地扩大阅读量,提高阅
读速度,掌握阅读技巧。养成课余阅读英文读物的习惯。刚开始时,由于词汇量
的限制,你可以阅读一些较浅显的文章,尽量读那些没有生词的简易读物。随着
词汇量的扩大,你的胃口也会越来越大。要多读原汁原味的文章,这样不仅开阔
了眼界,还学到了不少知识。一段时间下来,你的词汇量会丰富不少,理解能力
也有长足的进步。开始要有意地读一些诸如科普、历史、地理、环保、医学保健
方面的小品文。
有的同学还会经常碰到这样的问题:是文章本身对我来讲没有生词,但做阅
读理解题时经常会出现偏差。当然这种情况更多地是设计到阅读理解的考试。说
明你在阅读过程中遇到了理解上的障碍,因此在阅读理解中掌握一些答题技巧也
是十分重要的。