lua-users home
lua-l archive

Re: Hacking Lua for debug information

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 2012年03月19日 11:19, Peter Cawley wrote:
On Sun, Mar 18, 2012 at 1:08 AM, Florian Hester<florian@celaeno.org> wrote:
So, am i doing something which i simply should not be doing, debugging or
otherwise, or is there truly something screwy going on?
I believe that your Windows liblua.a is using NaN-packed 8-byte
TValues, while your main.c is picking up the definitions for naive
16-byte TValues. If the Linux output is placed along-side the Windows
output, and each line of Windows output is paired with two lines of
Linux output, then we get the following:
gc pointer: 0x23f3fe0 N/A
gc pointer: 0x23f4030 gc pointer: 003e4140
gc pointer: 0x23f4030 N/A
str value: Foo gc pointer: 003e37b0
nr value: 5.200000 N/A
nr value: -3.223000 gc pointer: 39581062
str value: Foo N/A
nr value: 10.823300 gc pointer: 93dd97f6
str value: Bar N/A
gc pointer: 0x23f40e0 gc pointer: 003e41a8
gc pointer: 0x23f4130 N/A
N/A gc pointer: baadf00d
N/A N/A
N/A gc pointer: baadf00d
...
If your Windows TValues were indeed NaN-packed then your type code
extraction will almost certainly give a random value, explaining why
it always said "gc pointer". Furthermore, number values would almost
certainly not look like heap pointers, while non-number values would
look like heap pointers. Finally, pointers beyond the end of memory
would come out as a sentinel value. All of these things match what is
seen.
Hello,
After some digging i discovered that the LUA_NANTRICK_LE macro definition is indeed responsible (luaconf.h) for enabling the use of NaN-packed 8-byte TValues on 32 bit systems, but not on 64 bit systems. My test program on Windows was not being compiled with this macro defined. Defining the LUA_NANTRICK_LE macro in my test program, and the use of the v_ macro to access the TValue struct, makes the test program work on Windows.
Thanks for the help everybody :-) .
- Florian

AltStyle によって変換されたページ (->オリジナル) /