Expressive Output Window - Beta

I agree with what you said here as the current design is simply unusable with my Studio window configurations:

6 Likes

I like its capabilities, but since I’m a vertical-output user it just doesn’t look as good as I expected.

One more thing is that it doesn’t have any sort of vertical padding from the bottom which makes it not feel good (only for it resized the way in your post, vertical and narrow)

image

Increasing the width causes the padding to return as the old output.

2 Likes

When I load into studio, literally all of the output is squished into the right quarter of the window, leaving the left side to be only take up by the error and warning symbols.

At least it’s possible to resize each section, but it’d be preferable if it would startup in a position where it is at least readable.

5 Likes

Literally the thing i’ve always been waiting for, debugging is going to be so much easier now!

2 Likes

I don’t like that the print function can throw errors. I imagine this will cause incompatibility issues with some older games. I also don’t see why the print function errors with ‘invalid key types’ and recursive tables, neither of these things should be an issue.

For invalid key types, tostring can be used on any value type to convert it into a string, meaning any value should be compatible.

For recursive tables, when one is reached it could simply be printed the same way old tables were, rather than throwing an error. Developers shouldn’t have to remove self referencing values from their tables just to be able to print them.

Example for recursive tables:

local PlayerData = {
	Player = game.Players.LocalPlayer;
	Guns = {};
}
local Gun = {
	OwnerData = PlayerData;
	Ammo = 10;
	Damage = 10;
}
table.insert(PlayerData.Guns,Gun)

print(PlayerData)
-- Output
{
	["Player"] = dogwarrior24,
	["Guns"] = {
		{
			["OwnerData"] = table: 0x62538af12d5a0ea8, -- Self referencing table printed like old output
			["Ammo"] = 10,
			["Damage"] = 10
		}
	}
}
6 Likes

I would like to hide plugin and core errors specifically, not all errors. I generated an error but I couldn’t determine if that’s possible. Is there a way to do that?

2 Likes

I like where this is going! I have a few complaints though.

I only care about the Message column and Timestamp column, not so much the Context and Source. I can’t really hide them without squeezing them, but if the Source column wraps then so does everything else. I just want to be able to hide certain columns to make room for the stuff I care about.

And then there’s this. It looks studio doesn’t remember how i’ve resized the columns to my liking.

Last time I had studio open, I squashed down the Timestamp column, the icon column, and the context column. But opening studio later, everything is all over the place, nothing like how I’d done. (The left-most column seems a little wide for tiny icons that look no larger than 16x16)

Otherwise, I’m liking this new output and keeping it enabled, usable enough for me and I personally prefer it over the current output window.

(Edit: I would like to see those white borders removed too, but that’s more trivial than getting this thing to work)

Update - This output does not have a fun time with many subsequent prints. My PC isn’t a powerhouse, but even with plenty of time in between (seconds even), 500+ prints takes a HUGE toll. This output is not usable if you plan on printing a lot of the same things and don’t have a very good PC.

Update again - This is now completely unusable unless I’m in “Log Mode,” because otherwise printing looks like this.

5 Likes

This has to be truly one of the best updates. As a programmer, the output is basically a window that I spend most of my time in (after the script editor of course), and this update made it 100 times better. Thank you!

So many times I had to make separate scripts just to see inside tables whenever I ran print(Table). This update will make it super efficient and will decrease development time. Thank you very much!

Another amazing addition. Not sure if this applies to plugins, but if plugins are being filtered out, then you grabbed my attention. Plugins are sometimes must-haves when developing, and I do happen to have that one plugin that errors every time you press the “play” button. Now, I will no longer have to worry about that (hopefully), and when I do error catching, I no longer have to be flooded by normal output.

Yet again another amazing feature. I am not really the searching type, but there have been times that I did want to look for a particular thing in the output and I just had to search through to find it. Thank you.

Conclusion: This update has to be one of the greatest yet, at least for me. This will help me with developing a lot. Thank you to all of those who worked on this. I can’t wait to try it out. Trully amazing!

(P.S.: If you could add the ability to track back to a local script after the game stopped running (currently, you can click on the output to open the script and then stop the game to keep it open, but after you stop the game, you can no longer click to access it), then that would be amazing as well)

2 Likes

I love you :heart_eyes: :heart_eyes: :heart_eyes:

1 Like

In this case, it would have to reference its memory location because if it were to go through the details of the table it would be an “infinite loop” of references to itself.

2 Likes

We can print tables!?
Bild

This is one of the best Outputupdates ever!
Just, how this works? I really am curious, do this works as you are using internal C++ Code or something else?

5 Likes

I get extreme lag when running a game that prints a lot every so often. Now obviously a normal game wouldn’t print that often but I have constant updates because of a Guest system and I want to know what each guest is doing. Before with the old output it could handle hundreds (even thousands) of recurring prints fine but it’s beginning to lag a lot with about 30 outputs.
This is probably because of the different data each output now produces (timestamp, context etc.)

Other than the severe lag, this has been a much needed improvement for so long! Reading the context as a string is much nicer than simple blocks of green or blue at the beginning.

Being able to identify more than just client + server outputs is very, very nice, and toggling whether you see every output or just errors is such a useful feature! :ok_hand: Fantastic job!

3 Likes

Dumb question probably…but how do I enable this new expressive output window? My Output window looks nothing like that…

image

1 Like

File > Beta features > scroll to Expressive Output > set to true, save and restart

6 Likes

The performance of this new output is absolutely abysmal. Try printing a simple value once every frame and observe as the output is hit with insane lag and choppiness. The old output could handle multiple prints per frame with no issue.

13 Likes

I suppose once it reaches the reference to itself, it could just have a string there instead saying ‘Reference to TableName’ or something instead of repeating the same data infinitely

1 Like
times = 0 
repeat 
   wait() 
   print('a') 
   times = times + 1 
until times == 60

Yep. Dropped to 30 - 40 frames after running this in the command bar, not even when playing.

4 Likes

I really hope this wasn’t written in Roact. I get the fact that roblox really likes to dogfood luau and push roact (which itself isn’t the best for performance), but the debugger is definitely not the place to do this. It’s too critical for studio performance and debugging to leave to a luau implementation.

7 Likes

This is actually something I was wishing would happen a few days ago. I was debugging a table and thought “man, it sure would be nice if I could just print the entire table.” Now I can do that! This is such a fantastic update that I am sure will many headaches in the future. I am loving some of the recent updates; keep up the great work! :roblox: :roblox_light:

It’s not working too well for me.

I cannot see anything and it doesn’t fill up the size. (I’m on ultra wide)