Le 04/03/2011 14:37, Hilaire Fernandes a écrit :
> Now, I still don't figure out what I should look at when stepping in the
> VM from GDB. I will try to figure out again.
Here is the step by step from breakpoint to running state:
Breakpoint 1, initialiseModule () at
/home/hilaire/Travaux/pharo/temp/COG/src/plugins/LocalePlugin/LocalePlugin.c:112
112 return sqLocInitialize();
(gdb) n
113 }
(gdb) n
callInitializersIn (pluginName=<value optimized out>, ffiLoad=<value
optimized out>)
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:211
211 if(!okay) {
(gdb) print
The history is empty.
(gdb) print init2
$1 = (void *) 0x559530
(gdb) print okay
$2 = <value optimized out>
(gdb) n
findOrLoadModule (pluginName=0x559530
"U\211\345S\350\356\370\377\377\201û\032", ffiLoad=5606992)
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:286
286 }
(gdb) n
ioLoadFunctionFrom (functionName=0xbff5d74c "primitiveTimezoneOffset",
pluginName=0xbff5d64c "LocalePlugin")
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:298
298 if(!module) {
(gdb) n
303 if(!functionName) {
(gdb) n
309 }
(gdb) n
308 return findFunctionIn(functionName, module);
(gdb) n
309 }
(gdb) n
ioLoadFunctionFrom (functionName=0x78139a2c "primitiveTimezoneOffset",
pluginName=0x17 <Address 0x17 out of bounds>)
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:308
308 return findFunctionIn(functionName, module);
(gdb) n
findFunctionIn (functionName=0xbff5d74c "primitiveTimezoneOffset",
module=0x81a11e8)
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:157
157 {
(gdb) n
158 if(module->handle == squeakModule->handle)
(gdb) n
161 return findExternalFunctionIn(functionName, module);
(gdb) n
162 }
(gdb) n
ioLoadExternalFunctionOfLengthFromModuleOfLength
(functionNameIndex=2014550572, functionNameLength=23,
moduleNameIndex=2014550204, moduleNameLength=12)
at
/home/hilaire/Travaux/pharo/temp/COG/platforms/Cross/vm/sqNamedPrims.c:332
332 }
(gdb) n
primitiveExternalCall () at
/home/hilaire/Travaux/pharo/temp/COG/src/vm/gcc3x-cointerp.c:27113
27113 if (addr == 0) {
(gdb) n
27118 for (i = GIV(externalPrimitiveTableFirstFreeIndex); i <=
(MaxExternalPrimitiveTableSize - 1); i += 1) {
(gdb) n
27122 goto l1;
(gdb) n
27119 if ((externalPrimitiveTable[i]) == 0) {
(gdb) n
27120 externalPrimitiveTable[i] = addr;
(gdb) n
27121 index =
GIV(externalPrimitiveTableFirstFreeIndex) = i + 1;
(gdb) n
27128 longAtput((lit + BaseHeaderSize) + (3 << ShiftForWord), ((index
<< 1) | 1));
(gdb) n
27129 if (index >= 0) {
(gdb) n
27130
rewriteMethodCacheEntryForExternalPrimitiveToFunction(addr);
(gdb) n
27131 callExternalPrimitive(addr);
(gdb) n
27137 }
(gdb) n
activateInterpreterMethodFromMachineCode () at
/home/hilaire/Travaux/pharo/temp/COG/src/vm/gcc3x-cointerp.c:8598
8598 if (FailImbalancedPrimitives
(gdb) n
8600 && ((GIV(framePointer) == savedFramePointer)
(gdb) n
8598 if (FailImbalancedPrimitives
(gdb) n
8601 && (!((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) <
heapBase))))) {
(gdb) n
8608 if (GIV(nextProfileTick) > 0) {
(gdb) n
8613 if (GIV(primFailCode) == 0) {
(gdb) n
8614 returntoExecutive(popStack(), 0);
(gdb) n
8621 activateNewMethod();
(gdb) n
--
Education 0.2 -- http://blog.ofset.org/hilaire