Re: [GD-General] remove unused functions
Brought to you by:
vexxed72
From: Colin F. <cp...@ea...> - 2003-05-19 20:40:05
|
Perhaps you could profile your code (Linux: gprof? Windows: VC++ 6.0 profile option), and dump the output to a text file. Report the function entry counts, not timings or line numbers. Strip out functions with non-zero total entries (if list is sorted by counts, just chop off the non-zero part of the list). What you do next depends on what you want to do, and how much work you are willing to put in to this. For me it would be fairly easy to write a program to use the list of functions to search through all source code files, identify both calling instances and function implementations, and prompt the user to approve proposed changes (e.g., removal or commenting out). It's tricky for situations like: if (never_true) { if (unused_function( x, y, z )) { // ... } } and: f = unused_function( x, y, z ); since you have to do more than strip out the function call itself! But maybe you CAN just strip out the function calling instance, and replace with a blank, or junk, and wait for compile errors to alert people to required fixes. That sounds risky. If you go with the prompting approach, you can have your utility propose a variety of substitutions for the block and vicinity. Based on the context you can come up with one or more likely "fixes" that the user can choose from. I'm sure hitting single keys for "SKIP", "PROPOSED MODIFICATION #1", "PROPOSED MODIFICATION #2", etc, per fix, would be a very fast process for a human. If you have methods with identical names in several C++ classes, things get a little trickier, since you are starting to do the work of the compiler to analyze code! Actually, this whole thing sounds like a fun utility to write, like "lint", but with the added information from a profiler. Maybe such a thing already exists... --- Colin ----- Original Message ----- From: "Tom Forsyth" <to...@mu...> To: <gam...@li...> Sent: Monday, May 19, 2003 12:38 PM Subject: RE: [GD-General] remove unused functions > Maybe you can add a prologue to every function that does two things: > > (a) declares a static instance of a class whose constructor adds the string > "__FILE__ __LINE__" to a table. > > (b) when it is called, finds and removes the string from the table. > > > Play the game for a while, go through as many different codepaths and > behaviours as you can think of, then dump the table to disk or whatever. And > there you go - a list of all the functions (well, where they are - maybe > there's a MS #define that lists the function name?) that haven't been called > this time around. > > Then add ASSERT (!"Nobody ever calls me or they would have removed this > assert") to each file, leave it a couple of weeks, and then kill all the > functions that still have that assert. > > > Tom Forsyth - Muckyfoot bloke and Microsoft MVP. > > This email is the product of your deranged imagination, > and does not in any way imply existence of the author. > > > -----Original Message----- > > From: Corrinne Yu [mailto:cor...@sp...] > > Sent: 19 May 2003 19:58 > > To: gam...@li... > > Subject: [GD-General] remove unused functions > > > > > > The game engine and game code base has gotten very very big. And it is > > about time to clean things up and improve its structure and > > documentation. > > > > One thing I would like to do to it is to start removing un-used > > functions. I tried to use MSDev to remove un-referenced functions as a > > start but didn't find any. It turns out quite a few of the "un-used" > > functions are "referenced" (and thus can't be that easily > > automatically > > determined) but I know from how the game and engine code is > > supposed to > > run that they won't ever be called. > > > > They are not exactly unreachable code either, so doing the unreachable > > code thing also doesn't work. > > > > I truly "dread" :D the idea to have to manually step through all the > > code and manually cull out every single un-used function by > > hand (it is > > a lot of code to wade through!). I wonder what tools exist inside of > > MSDev (or simple easy to use small external tools) that can help me in > > my highly un fun task of cleaning up my code base, specifically in the > > task of removing "un-used" functions. > > > > Thank you for your experience in this task, and your suggestions. > > > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: ObjectStore. > > If flattening out C++ or Java code to make your application fit in a > > relational database is painful, don't do it! Check out ObjectStore. > > Now part of Progress Software. http://www.objectstore.net/sourceforge > > _______________________________________________ > > Gamedevlists-general mailing list > > Gam...@li... > > https://lists.sourceforge.net/lists/listinfo/gamedevlists-general > > Archives: > > http://sourceforge.net/mailarchive/forum.php?forum_id=557 > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: ObjectStore. > If flattening out C++ or Java code to make your application fit in a > relational database is painful, don't do it! Check out ObjectStore. > Now part of Progress Software. http://www.objectstore.net/sourceforge > _______________________________________________ > Gamedevlists-general mailing list > Gam...@li... > https://lists.sourceforge.net/lists/listinfo/gamedevlists-general > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=557 |