再次感謝諾基亞論壇的 beover1984 提供幫助!
【參考文章】:http://www.symbian.net.cn/blog/post/5.html
聲明:雖然上面的【參考文章】標(biāo)題是 Use HookLogger to trace memroy leak in S60 3rd SDK ,但 S60 第二版也適用!
需要說明的是 EPOCROOT 是在 Windows 系統(tǒng)變量中改的且前后都要有“/”(不是 Windows 下用的“\”)
也可以不用系統(tǒng)變量而直接使用下面的 perl 代碼 替換 HookEUSER.pl 的內(nèi)容 , 并把第53行改為你的 SDK 路徑(注意無盤符):
這樣你只要安裝完 HookLogger 并按照上面的方法更新 HookEUSER.pl,再按照【參考文章】運(yùn)行程序就行了。
程序的使用很簡(jiǎn)單,這里不再贅述。
定位到內(nèi)存泄露的地方后剩下的事就交給你了~~
【參考文章】:http://www.symbian.net.cn/blog/post/5.html
聲明:雖然上面的【參考文章】標(biāo)題是 Use HookLogger to trace memroy leak in S60 3rd SDK ,但 S60 第二版也適用!
需要說明的是 EPOCROOT 是在 Windows 系統(tǒng)變量中改的且前后都要有“/”(不是 Windows 下用的“\”)
也可以不用系統(tǒng)變量而直接使用下面的 perl 代碼 替換 HookEUSER.pl 的內(nèi)容 , 并把第53行改為你的 SDK 路徑(注意無盤符):
1
# HookEUSER.pl
2
3
use strict;
4
use FindBin qw($Bin);
5
6
my $badArg = 0;
7
my $remove = 0;
8
my $platform;
9
my $release = "UDEB";
10
my $arch;
11
if($#ARGV >= 0)
12
{
13
my $arg = 0;
14
if($ARGV[0] =~ m!^[-/]r$!i)
15
{
16
$remove = 1;
17
++$arg;
18
}
19
if($#ARGV >= $arg && $ARGV[$arg] =~ /^wins(cw)?$/i)
20
{
21
$platform = $ARGV[$arg];
22
$arch = ($platform =~ /^wins$/i)? "eka1": "eka2";
23
++$arg;
24
}
25
while($#ARGV >= $arg && $ARGV[$arg] =~ /^(udeb|urel|eka1|eka2)$/i)
26
{
27
if($ARGV[$arg] =~ /^(udeb|urel)$/i)
28
{
29
$release = $ARGV[$arg];
30
}
31
else
32
{
33
$arch = $ARGV[$arg];
34
}
35
36
++$arg;
37
}
38
$badArg = ($#ARGV >= $arg);
39
}
40
41
if($badArg || !defined($platform))
42
{
43
print <<USAGE_EOF;
44
usage: HookEUSER.pl [-r] <PLATFORM> [RELEASE] [ARCH]
45
where: <PLATFORM> == WINS | WINSCW
46
[RELEASE] == UDEB | UREL (default == UDEB)
47
[ARCH] == EKA1 | EKA2 (default == EKA1 for WINS, EKA2 for WINSCW)
48
-r restores original EUSER.DLL
49
USAGE_EOF
50
exit(0);
51
}
52
53
my $path = "/Symbian/8.0a/S60_2nd_FP2_SC/epoc32/release/wins/udeb";
54
chdir($path) or die "Failed setting cwd to $path";
55
my $euser = "euser.dll";
56
my $euser_orig = "euser.orig.dll";
57
my $hooks = "EUserParasite_$arch.dll";
58
my $hooks_src = "$Bin/$hooks";
59
die "Can't find \"$hooks_src\"" unless -e $hooks_src;
60
print "Target path is $path\n";
61
die "Can't find \"$euser\" - wrong drive, arguments, or EPOCROOT env var?" unless -e $euser;
62
if($remove)
63
{
64
die "Can't find \"$euser_orig\" - was EUSER.DLL hooked by this script?" unless -e $euser_orig;
65
unlink $euser or die "Can't delete hooked EUSER.DLL - is emulator (etc) running?";
66
rename($euser_orig, $euser) or die "Failed renaming $euser_orig to $euser";
67
print "Restored $euser from $euser_orig; hooks no longer in place\n";
68
}
69
else
70
{
71
die "\"$euser_orig\" present - has EUSER.DLL already been hooked?" if -e $euser_orig;
72
my $hooked_euser = "$euser.HOOKED";
73
unlink $hooked_euser; # earlier attempt may have died with "in use", etc
74
my $cmd = "copy \"$hooks_src\"";
75
$cmd =~ tr-/-\\-;
76
system($cmd) == 0 or die "Failed running \"$cmd\"";
77
$cmd = "\"$Bin/AttachDll\" $euser $hooks $hooked_euser";
78
system($cmd) == 0 or die "Failed running \"$cmd\"";
79
rename $euser, $euser_orig or die "Failed renaming $euser to $euser_orig - is emulator (etc) running?";
80
rename $hooked_euser, $euser or die "Failed renaming $hooked_euser to $euser";
81
print "Modified $euser to hook $hooks, original is $euser_orig.\nRun HookEUSER with -r to restore\n";
82
}
83

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

這樣你只要安裝完 HookLogger 并按照上面的方法更新 HookEUSER.pl,再按照【參考文章】運(yùn)行程序就行了。
程序的使用很簡(jiǎn)單,這里不再贅述。
定位到內(nèi)存泄露的地方后剩下的事就交給你了~~
大哥, 你說第二版可以使用, 這話太不負(fù)責(zé)了吧.. 我用2nd_fp3就用不了, 網(wǎng)上有人說, 不支持第二版的..你第二版試過通過么, 若通過請(qǐng)指教. 謝謝
gtwdaizi@163.com
呵呵, 我這個(gè)當(dāng)然是自己用過才敢說出來的
我當(dāng)時(shí)的開發(fā)環(huán)境是 VS 2003 + Carbide.vs 2.0.1 + 2nd_fp2 wins
2nd_fp3好像是不支持, 我原來好像試過(現(xiàn)在記不清了), 也有段時(shí)間沒用這個(gè)工具了
現(xiàn)在第二版的開發(fā)環(huán)境已經(jīng)換成 VS 2005 + Carbide.vs 3.0.1 + 2nd_fp2 winscw 了, 也有點(diǎn)擔(dān)心這個(gè)工具用不了... 過段時(shí)間應(yīng)該就能用上它了
個(gè)人感覺還是Symbian/Nokia有點(diǎn)不重視開發(fā)者, 這個(gè)工具有年頭沒更新了...
您的評(píng)論是 2008-01-02 發(fā)的, 可我今天才收到系統(tǒng)提醒郵件...由于比較懶, 博客一直沒更新...也沒來看過...這個(gè)回復(fù)應(yīng)該也沒什么價(jià)值了吧...
不過說來也巧, 今天剛收錄了您博客的一篇文章, 呵呵, 共同進(jìn)步吧