Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6111909
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T14:41:05+00:00 2026-05-23T14:41:05+00:00

I’m currently implementing a profiling system into an application. I have a two macro

  • 0

I’m currently implementing a profiling system into an application.

I have a two macro functions which are defined based on a compiler flag (NDEBUG). When NDEBUG is not defined, these two functions (profilingStart / profilingEnd) generate profiling reports which show the time when profilingStart was called, vs the time when profilingEnd was called.

The concern is the potential for a mismatch to occur — i.e, a scenario when profilingStart has been called, but profilingEnd has not (or vice-versa). My code will already recognize these situations at run-time, but it would be preferable if an error resulted during compile time due to this mismatch.

One suggestion has been to use the do{…}while(); construct to ensure the profiling functions are properly paired. The start macro function would contain the do{ and the end macro would contain the }while(). If one is missing, we would get an error at compile time. However, there are some issues with this — you could only use the profilingStart() and profilingEnd() calls at the start and end of the function which is being profiled, as using them within the function could impact the scope of local variables (as they may go out of scope due to the do{…}while() call).

Another idea I have had is just to declare a variable in the profilingStart function and then attempt to modify the contents of that variable in the profilingEnd function. This prevents scope issues and would generate a compiler error if the variable was never declared. However, I would never have any method of verifying that the contents of the variable are modified in the end function. This only helps with half of the problem, as it does not verify the call of the profilingEnd function.

Any comments are appreciated, as always. Thanks in advance.

EDIT: There may be some confusion regarding my comment(s) regarding scope. profilingStart() and profilingEnd() will always be called within the same function. They may just not be called at the very beginning / very end of the function. Here is an example of what I meant:

int DoSomething(void)
{
   profilingStart();
   int a;
   DoMath(a);
   profilingStop();
   return a; // a is out of scope here, as the do{...}while(0) construct has gone out of scope
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T14:41:06+00:00Added an answer on May 23, 2026 at 2:41 pm

    In C++, one solution is to use the “RAII” idiom. Something like this:

    class Profiler {
      public:
        Profiler() { profilingStart(); }
        ~Profiler() { profilingEnd(); }
    }
    

    Then you use it like this:

    { // start of block you want to profile
        Profiler prof;
        ...
    }
    

    This will ensure that profilingEnd gets called even in the presence of exceptions, early returns, break, etc. That is, it absolutely guarantees the calls are paired.

    It does require putting code you want to profile in a block, though.

    [edit]

    I missed that you want to be able to put profilingEnd in a different block than profilingStart.

    See @Roddy’s comment below for ideas on how to deal with this; e.g. by having the destructor check to make sure the profiler has been stopped by the time the object is destructed. Although this will not catch the problem at compile time, it will catch it “near” the problem at run time.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

link Im having trouble converting the html entites into html characters, (&# 8217;) i
this is what i have right now Drawing an RSS feed into the php,
I am currently running into a problem where an element is coming back from
I have a French site that I want to parse, but am running into
I have a text area in my form which accepts all possible characters from
I have just tried to save a simple *.rtf file with some websites and
Configuring TinyMCE to allow for tags, based on a customer requirement. My config is
I am trying to understand how to use SyndicationItem to display feed which is
I used javascript for loading a picture on my website depending on which small
I have a jquery bug and I've been looking for hours now, I can't

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.