tarantool / tarantool

Get your data in RAM. Get compute close to data. Enjoy the performance.
https://www.tarantool.io
Other
3.4k stars 381 forks source link

Increase limits for debug.traceback #4581

Open printercu opened 5 years ago

printercu commented 5 years ago

Currently it cuts out path prefixes and removes intermediate frames. This makes it harder to debug and navigate to files right from terminal.

1111/2222/3333/4444/5555/6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua 
false   .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:5: attempt to call global 'x' (a nil value)
stack traceback:
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:5: in function 'a39'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:6: in function 'a38'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:7: in function 'a37'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:8: in function 'a36'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:9: in function 'a35'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:10: in function 'a34'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:11: in function 'a33'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:12: in function 'a32'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:13: in function 'a31'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:14: in function 'a30'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:15: in function 'a29'
        ...
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:37: in function 'a07'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:38: in function 'a06'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:39: in function 'a05'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:40: in function 'a04'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:41: in function 'a03'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:42: in function 'a02'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:43: in function 'a01'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:44: in function <.../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:44>
        [C]: in function 'xpcall'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:46: in main chunk

This behaviour is configured with TRACEBACK_LEVELS1, TRACEBACK_LEVELS2 and LUA_IDSIZE constants. Can this values be changed?

servoin commented 4 years ago

Currently it cuts out path prefixes and removes intermediate frames. This makes it harder to debug and navigate to files right from terminal.

1111/2222/3333/4444/5555/6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua 
false   .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:5: attempt to call global 'x' (a nil value)
stack traceback:
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:5: in function 'a39'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:6: in function 'a38'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:7: in function 'a37'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:8: in function 'a36'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:9: in function 'a35'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:10: in function 'a34'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:11: in function 'a33'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:12: in function 'a32'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:13: in function 'a31'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:14: in function 'a30'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:15: in function 'a29'
        ...
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:37: in function 'a07'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:38: in function 'a06'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:39: in function 'a05'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:40: in function 'a04'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:41: in function 'a03'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:42: in function 'a02'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:43: in function 'a01'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:44: in function <.../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:44>
        [C]: in function 'xpcall'
        .../6666/7777/8888/9999/aaaa/bbbb/cccc/dddd/eeee/ffff/x.lua:46: in main chunk

This behaviour is configured with TRACEBACK_LEVELS1, TRACEBACK_LEVELS2 and LUA_IDSIZE constants. Can this values be changed?

Hello, printercu! How would you like these values to be changed? Maybe it's worth making them configurable? Currently these are:

define TRACEBACK_LEVELS1 12

define TRACEBACK_LEVELS2 10

define LUA_IDSIZE 60

What limits would be enough? Could you please also attach your test case to the issue? Thanks.

printercu commented 4 years ago

Is there any downside of making them very large or disabling this limit at all?

servoin commented 4 years ago

Traceback limits are used to reasonably limit number of call stack frames printed. For example, if a recursive function is being called 1000 times, it's not practical to print all these 1000 frames and more. LUA_IDSIZE is used in internal debug structures for buffer allocation, so it cannot be infinite. That is, the limits cannot be removed completely, but can be set to reasonably high values.

servoin commented 4 years ago

We agreed that traceback levels should be set to 25 and LUA_IDSIZE to 128.