Now stepping in TEnv::TEnv
, right before the function ReadFile(s, kEnvGlobal)
, the char pointer char *s = gSystem->ConcatFileName(etc, sname);
is pointing to a 0 value.
The etc
and sname
values are below, there seems to be some memory error in sname
.
(gdb) p etc
$39 = {_vptr.TString = 0x7ffff7f17bb0 <vtable for TString+16>, fRep = {{fLong = {fCap = 1697590789, fSize = 25460, fData = 0x1005ef10 "8\026\362\367\377\177"}, fShort = {
fSize = 5 '\005', fData = "./etc\000\000\020\357\005\020\000\000\000"}, fRaw = {fWords = {1697590789, 25460, 268824336, 0}}}}, static fgIsA = {_M_b = {_M_p = 0x0}}}
(gdb) p sname
$40 = {_vptr.TString = 0x7ffff7f17bb0 <vtable for TString+16>, fRep = {{fLong = {fCap = 1937339149, fSize = 778921332,
fData = 0xff006372746f6f72 <error: Cannot access memory at address 0xff006372746f6f72>}, fShort = {fSize = 13 '\r', fData = "system.rootrc\000\377"}, fRaw = {fWords = {
1937339149, 778921332, 1953460082, -16751758}}}}, static fgIsA = {_M_b = {_M_p = 0x0}}}
(gdb) p s
$41 = 0x1005eef0 ""
(gdb) x 0x1005eef0
0x1005eef0: 0x00000000
(gdb) p !s
$42 = false
Full log here, fyi:
gdb_stepping_TEnv.txt (49.1 KB)
It executed these lines in TEnv::TEnv
, I put the gdb value check below:
fIgnoreDup = kFALSE;
fTable = new THashList(1000);
fRcName = name;
# (gdb) p name
# $21 = 0x7ffff7d7f0e0 ".rootrc"
TString sname = "system";
sname += name;
# (gdb) p name
# $32 = 0x7ffff7d7f0e0 ".rootrc"
# (gdb) p sname
# $33 = {_vptr.TString = 0x7ffff7f17bb0 <vtable for TString+16>, fRep = {{fLong = {fCap = 1937339142, fSize = 7169396,
fData = 0xfffffffffeff0000 <error: Cannot access memory at address 0xfffffffffeff0000>}, fShort = {fSize = 6 '\006',
fData = "system\000\000\000\377\376\377\377\377\377"}, fRaw = {fWords = {1937339142, 7169396, -16842752, -1}}}}, static fgIsA = {_M_b = {_M_p = 0x0}}}
TString etc = gRootDir;
# (gdb) p gRootDir
# $34 = 0x1005db38 "."
etc += "/etc";
# (gdb) p etc
# $38 = {_vptr.TString = 0x7ffff7f17bb0 <vtable for TString+16>, fRep = {{fLong = {fCap = -16765439, fSize = 32767, fData = 0x1005ef10 "8\026\362\367\377\177"}, fShort = {
fSize = 1 '\001', fData = ".\000\377\377\177\000\000\020\357\005\020\000\000\000"}, fRaw = {fWords = {-16765439, 32767, 268824336, 0}}}}, static fgIsA = {_M_b = {
_M_p = 0x0}}}
char *s = gSystem->ConcatFileName(etc, sname);
Please advise. This seems to point to some memory issue.