Debugging CEGUI String

Discussion regarding the development of CEGUI itself - as opposed to questions about CEGUI usage that should be in the help forums.

Moderators: CEGUI MVP, CEGUI Team

User avatar
Sinbad
Not too shy to talk
Not too shy to talk
Posts: 35
Joined: Wed Jan 12, 2005 12:06
Location: Guernsey, Channel Islands
Contact:

Debugging CEGUI String

Postby Sinbad » Wed Aug 11, 2004 23:42

I'm busy debugging my Tab Control, and I'm having to look at strings a lot. However, the CEGUI custom String class seems to defy inspection (without an ASCII table, or a cast on the internal members which gets tedious), is there a simple way to read these strings?

Thanks

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Thu Aug 12, 2004 04:55

Well, I'll just tell you what I do; which is a bit wanky, but it's what I do :)

I expand the String in the debugger to show it's members, look for the d_quickbuff and d_buffer fields, to inspect the value drag one of these onto your memory window. d_buffer is only used when the reserve buffer for the string is > some internal value, so basically if the pointer looks invalid look at d_quickbuff instead.

It should be possible to get the VS debugger do this automatically, maybe I'll have a go at this later today; so long as Doom 3 doesn't arrive ;)

User avatar
Sinbad
Not too shy to talk
Not too shy to talk
Posts: 35
Joined: Wed Jan 12, 2005 12:06
Location: Guernsey, Channel Islands
Contact:

Debugging CEGUI String

Postby Sinbad » Thu Aug 12, 2004 12:18

Hehe, I hadn't thought of the memory window, I'd been casting the pointers to char*. That's a little better, thanks - I know what you mean about getting VC to do this but I hadn't had time to look into it.

I'm past all the crash bugs now, and my tab control is starting to function, although for some bizarre reason I couldn't for the life of me get the buttons to render. The pane (a custom class too) renders fine, but the TL buttons never seem to get their drawNormal() or drawPushed() methods called (I've overridden drawSelf in the core tab button to call drawNormal or drawPushed depending on whether the tab is selected). The tab area definitely has a valid region, I've traced it that far, and I even tried requesting a redraw after resizing them (onSize() calls layoutComponentWidgets(), calls setPosition / size on the buttons..). The log tells me that a button is being created based on my XML child pane. I'll admit, I was cursing ;)

I gave up in the early hours, hoping I'll see it later on today. But if you think of anything obvious I might have missed, let me know (I realise you might not be able to answer that without seeing the code ;) )

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Thu Aug 12, 2004 13:18

Hehe, I hadn't thought of the memory window, I'd been casting the pointers to char*. That's a little better, thanks - I know what you mean about getting VC to do this but I hadn't had time to look into it.

I put an entry into autoexp.dat, telling it that the data was a unicode string, but this only showed the first character. The solution will be to code a quick add-in dll for the debugger, this is something I might do when I have a couple of hours spare or if I get bored :)

...The log tells me that a button is being created based on my XML child pane. I'll admit, I was cursing ;)

:shock:

I gave up in the early hours, hoping I'll see it later on today. But if you think of anything obvious I might have missed, let me know (I realise you might not be able to answer that without seeing the code ;) )

I've had many issues with things not showing up.
Obvious question first - have you added the tab buttons as children to an appropriate parent window?
Much of the time my probelms with this were caused by my layout code causing some part of the area rect of the widget to be set to NAN (most of the time this was due to divide by zero) - so you might want to check the d_abs_area and d_rel_area Rects for your button windows to ensure that they are set to something appropriate. Also ensure your position and size values are appropriate for the metrics mode in use. If I think of anything else I'll obviously let you know :)

CE.

User avatar
Sinbad
Not too shy to talk
Not too shy to talk
Posts: 35
Joined: Wed Jan 12, 2005 12:06
Location: Guernsey, Channel Islands
Contact:

Debugging CEGUI String

Postby Sinbad » Thu Aug 12, 2004 16:05

Here's my structure:

Code: Select all

TabControl (TLTabControl)
  |   (absolute width/height, about 200x500)
  |
  |-- Tab Button Pane (DefaultGUISheet)
  |      |   (relative width/height, 1.0 x 0.1)
  |      |
  |      |-- Tab Button (TLTabButton)
  |              (relative width/height, <derived from font> x 1.0
  |
  |-- Tab Content Pane (TLTabPane)
         |   (relative width/height, 1.0 x 0.9)
         |
         |-- Content Area (DefaultGUISheet)
                |
                |-- < .. plenty of controls .. >

I'll check all the sizes again when I get home, but I was pretty sure they were ok. Perhaps time to whack a shedload of logging on. :)

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Thu Aug 12, 2004 18:10

That all looks okay to me.

If the render methods for the buttons are not being called, I would concentrate my efforts on the parent window of those buttons (so, "Tab Button Pane"), since that is where the decision is made about whether or not to render them (if the parent thinks it is totally clipped, none of it's children need to be drawn, so the methods are not called).

Now, I just realised there's a bug in this idea (almost certainly unrelated to your problem); if a window is set not to be clipped by it's parent, it needs to be drawn regardless of whether the parent is fully clipped, which doesn't happen at the moment - I'll add this to the todo list.

User avatar
Sinbad
Not too shy to talk
Not too shy to talk
Posts: 35
Joined: Wed Jan 12, 2005 12:06
Location: Guernsey, Channel Islands
Contact:

Debugging CEGUI String

Postby Sinbad » Thu Aug 12, 2004 19:55

There's nothing like a fresh head. Within 10 mins of debugging through nested Window::render calls and I realised I hadn't correctly altered some initialisation code when I changed tack late last night, to adding a pane for the tab buttons (instead of making them direct children of the tab control). Like a muppet, I'd forgotten to add the pane to the control. Shoot me, please :oops:

I have some visual glitches and event-related things to sort out, but I'm moving forward again :)

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Thu Aug 12, 2004 21:30

Hehe, it's always the silly mistakes that are really hard to see (especially when you've been staring at the code for hours) :)

User avatar
thumperj
Not too shy to talk
Not too shy to talk
Posts: 30
Joined: Wed Jan 12, 2005 12:06
Location: Austin, TX
Contact:

Debugging CEGUI String

Postby thumperj » Thu Sep 30, 2004 16:17

Hehe, I hadn't thought of the memory window, I'd been casting the pointers to char*. That's a little better, thanks - I know what you mean about getting VC to do this but I hadn't had time to look into it.

I put an entry into autoexp.dat, telling it that the data was a unicode string, but this only showed the first character. The solution will be to code a quick add-in dll for the debugger, this is something I might do when I have a couple of hours spare or if I get bored :)
.


Maybe I can help with this. If you'll put your string var into the watch window followed by ",ma" you will be able to read the string. Like this:
pMyStr->d_quickbuff,ma
It's looks a little screwy but it works.

A better solution, like Crazy Eddie mentioned, is a add-in dll. So I wrote one that decodes String and Window. You can get it here. Put it in your path along with CEGUIBase.dll, the stl DLLs and the xerces DLLs. I just put all of this into my Common\MSDev98\Bin subdir... arguably not the best approach. ;)

Just put in your autoexp.dat file these lines:

Code: Select all

CEGUI::Window= $ADDIN(CEGUIAutoExpHlpr.dll,_AutoExpCEGUIWindow@28)
CEGUI::String= $ADDIN(CEGUIAutoExpHlpr.dll,_AutoExpCEGUIString@28)

Here are a few others I've put in my autoexp.dat that might be helpful:

Code: Select all

CEGUI::Rect= l=<d_left>,r=<d_right>,t=<d_top>,b=<d_bottom>
CEGUI::Point=  <d_x>,<d_y>
CEGUI::Vector2= <d_x>,<d_y>
CEGUI::Vector3= <d_x>,<d_y>,<d_z>


I'll be happy to add any other expansions anyone would like, if they would be helpful. Just let me know.

Oh, and I've ONLY used this DLL on VC6. I have no idea if it will work with VC7.

Cheers,
Chris

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Thu Sep 30, 2004 18:25

I just tried it on VC7.1 and it works there too (obviously I had to have stlport, which most vc7 users do not have).

I have to say this very cool, one suggestion I have for the dll is for the Window show it's type as well as its name. I know it's possible to expand the view to get that, but you can't beat "at a glance" infomation ;)

CE

User avatar
thumperj
Not too shy to talk
Not too shy to talk
Posts: 30
Joined: Wed Jan 12, 2005 12:06
Location: Austin, TX
Contact:

Debugging CEGUI String

Postby thumperj » Thu Sep 30, 2004 18:48

I just tried it on VC7.1 and it works there too (obviously I had to have stlport, which most vc7 users do not have).

Great! Two environments in one! :)

I have to say this very cool

Thanks very much. :D

one suggestion I have for the dll is for the Window show it's type as well as its name. I know it's possible to expand the view to get that, but you can't beat "at a glance" infomation ;)

Great suggestion! And it's done! Just download it again from the same link and see if you like it. :)

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Debugging CEGUI String

Postby CrazyEddie » Fri Oct 01, 2004 08:12

Yes, I like the new summary info for Window :) This is very useful when debugging the middle of something and you have a Window od some description, previously you'd have no idea which window it was or what type, now we can see that instantly. Thanks :)

CE.

HorizonDefeated
Just popping in
Just popping in
Posts: 19
Joined: Tue Feb 16, 2010 00:17

Re: Debugging CEGUI String

Postby HorizonDefeated » Tue Feb 16, 2010 00:19

Sorry about reviving a super old thread. I tried using the DLL posted above with VC8 and didn't have any luck. Does anyone have a .dll and source code for string and window preview for use with VC8 debugger?

Thanks!

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Re: Debugging CEGUI String

Postby CrazyEddie » Tue Feb 16, 2010 09:43

Hmmm, isn't it the case that you can do this in the newer IDEs without needing an actual DLL? "Data Visualisers" or some such thing... I thought we'd had something like that posted here also... If I manage to find it, I'll post back :)

[Edit]
I found it! Here's a link: viewtopic.php?f=2&t=3605 - it is still a DLL, anyway, I hope the post is useful :)

CE.

HorizonDefeated
Just popping in
Just popping in
Posts: 19
Joined: Tue Feb 16, 2010 00:17

Re: Debugging CEGUI String

Postby HorizonDefeated » Tue Feb 16, 2010 17:02

Thanks CE. That one works great on my VS2005 (VC8) system. I presume it works well on VS2008 too because that's what the author wrote it for.

BTW I did find a Data Visualizer code snippet that could inspect CEGUI::String but it does not provide an adequate "at a glance" preview and I could not figure out how to make one myself (got my hands dirty a little bit). I'm of the opinion that it is not possible without a DLL.


Return to “CEGUI Library Development Discussion”

Who is online

Users browsing this forum: No registered users and 2 guests