|
Well, I would BUT there are some problems I've found with std::vector<>:
1) Deep copies -- Every time I resize the vector, a constructor is called, or an operator = () is called. I can't remember which. Either way, if an object in an std::vector<> requires deep copies to be made, lots of time is just wasted allocating, releasing, and assigning memory.
2) For instance, take my vString class. If I had used std::vector<char> for it's base type, things might be a little more complicated, and time consuming. ( With #1 in mind )
The roof's on fire,
but it keeps out the rain.
So clench your fists,
and enjoy the pain.
|
|
|
|
|
Sorry for the late reply, but are you using an old compiler? If not, implement move semantics in your classes. It will take care of things for you.
|
|
|
|
|
|
Tyler Elric wrote: Is this what your'e referring to as "Move semantics" ?
Yes it is.
|
|
|
|
|
Hi All,
My C++ console application is crashing randomly. I heard about a Visual Studio 2010(Ultimate) version's feature "IntelliTrace". But, sad part is that IntelliTrace in VS2010 is not available for debugging C++ applications. Does anybody know about any debugger which has similar feature? Or any suggestions about how to approach to solve this kind of random crash problems?
Ramana G
|
|
|
|
|
Typically I don't rely on debuggers, they aren't helping me much (for small programs there is no need, and for large complex ones they just aren't good enough).
This is what I do:
1. include good old-fashioned logging to a file, i.e. append one line of text telling what piece of code is executing, what the value is of some key variables, etc, all with a timestamp and a thread ID.
2. run the program a number of times; if it doesn't fail frequently enough, try and force it to fail more often by either stressing the system (less free RAM, more CPU load, whatever is relevant) or by increasing its activity (e.g. lowering its timer's periods or feeding it more input).
3. then compare all the logs, looking for a pattern at the moments of the crashes.
It is essential to have the latest information in the log file, therefore I open-append-close it for each and every line; and it may need locking for thread synchronization (although I typically try it without, as that is less intrusive).
All this (and anything you might do) may alter the timing a bit (and change thread synchronization, and cause more or fewer deadlocks), but most often it is adequate to pinpoint the problem. Of course, when the log file isn't detailed enough, I keep adding log statements. It all may sound antiquated, in my experience it works great, and all it takes is intimate knowledge about your app, and some energy; no need to get familiar with debugger idiosyncrasies.
Note: Having only one author for all the code is a big help; having lots of programmers, third party products, etc. all contributing to the crashing app may make it almost unsolvable.
|
|
|
|
|
If you tell the debugger to stop on exceptions (except for a few that might be expected in your application), the debugger will stop about half of the time exactly where the problem occurs.
If you are developing native C++ application and use STL then using checked iterators will also find most misuse although if will run much more slowly in that case. Generally the performance of C++ application is more affected by debugging than C# application (or safe C++/CLI).
Very often, it is possible to just put a breakpoint at the appropriate location and find the problem really fast. You just have to learn to use the debugger. Most of the time, simply inspecting a few variable give an hint on the problem. Well, maybe with some habit...
"Edit and continue" is also very powerful as you can often correct the code as soon as the error is detected (and maybe execute the code again after ensuring it won't cause undesirable side-effect).
It is possible to compile your C++ code as managed and then see if you can use Intellitrace. In Visaul Studio 11 Ultimate Preview, it works for safe C++/CLI code... I haven't tried other options.
Adding a lot of check in code (assertions) and tracing some information also help find problems.
In my case, most of the time, assertion and validation done in libraries (STL, .NET) and the use of a debugger let me find problems relatively quickly...
Well, maybe doing .NET development and using C# for more than half my code probably do help also...
Philippe Mori
|
|
|
|
|
Get windbg off the net'o'sphere and attach it to your exe. Set up the symbols, paths etc, and when it gacks up, do a (possibly) break and then !analyze -v and windbg will tell you exactly where it went wrong.
Great tool windbg, truly greatr. Massive, complex, quirky, but a hell of a good debugger.
==============================
Nothing to say.
|
|
|
|
|
I may be wrong but my understanding is that the information IntelliTrace assembles requires Reflection, managed code, or both. So, most likely, there are no tools with similar functionality for C++. I'm quite sure if it were possible, MS would provide it already.
With regard to random crashs, IME they are caused most of the time by inproper memory access, i. e. writing to or reading from memory areas that don't belong to you or the like. Your best bet is to look for tools that find memory problems. I'm using Insure++ for this purpose, which comes with the added advantage that it finds many problems before you even start the program. It is very slow though and requires a lot of additional memory, so it might be a good idea to look around for competitive products and see which suits your needs best.
|
|
|
|
|
Hi,
Console Application? the old adage is: "When in Doubt, Print more Out". The Macro's
__LINE__ and
__FILE__ are realy handy there. Write a Dump Function, and do something like:
Dump(__FILE__,__LINE__,"Still Alive")
That is how you narrow down problems. You know your code, because you wrote it. It is hard to see how an Intellitrace debugger can have a better idea about what you wanted to write in the first place than that you can have. (It could work well in those highly structured Wizzard ridden area's such as Web Matrix. There the Author has no notion of what was written on his behalf, the only thing known to him there is what he wanted to achieve.
Commandline Programs? Not very likely Candidates for that technology.
When it trashes, you can narrow down where it happens. Also, occasional trashing tends to happen in retail code. Not much code is tested long enough in debug mode to catch an occasional trashing.
Even MS Word trashes occasionally, and that is also not always a software issue of your making.
Anyway, Debuggers don't work very well with retail code. LogFiles Do! Also, You Don't need to log in Text, You can create your own logging format, plus a (windows) app that can read and display the info.
If your code is perfect, but on occasion Windows trashes it anyways, there is little you can do (apart from re-writing Windows)
However, What are the Consequences of trashing. Did the User loose their input(inconvenience) or was an entire network or database crashed(Unmitigated Disaster). The former, Let it Go, if it is infrequent. The Latter: write your software mindfull of this, and be aware of the transaction technology you implement or wrote.
Hope this is Helpful,
Bram van Kampen
|
|
|
|
|
please send me topics or data
that are related to loops&functions.i am waiting for your reply.....
|
|
|
|
|
You can find lots of information on this by a simple Google search or by picking up a C++ reference guide, or even by reading some of the fine articles here on the CodeProject website.
|
|
|
|
|
What do you want to know? That's a really vague question... if you don't have a specific question, you're better off going to Google[^].
|
|
|
|
|
maheen zahra wrote: please send me topics
Financial markets.
maheen zahra wrote: <layer> or data
Get it off CNBC.
maheen zahra wrote: that are related to loops&functions
while(stillstupid || stilllazy)
{
buybook(*dollars);
readbook(*brain);
understand(*hardwork);
)
makemoney(*moredollars);
How is that?
==============================
Nothing to say.
|
|
|
|
|
What about in assembly? 
|
|
|
|
|
move edi edi
pop ebp esi
pop ebp+4 esx
pop ebp+8 edx
cmp esx edx
jne life + 32
push *dollars
call buybook
etc etc etc
(actually, thats a load of crap, but I dont write assembly, I just have to understand it )
==============================
Nothing to say.
|
|
|
|
|
|
thank you about infomations
|
|
|
|
|
Great answer! 5+
I'm not really sure that the read function call will work though. I have this feeling the parameter will cause a null pointer exception.
"With sufficient thrust, pigs fly just fine."
Ross Callon, The Twelve Networking Truths, RFC1925
|
|
|
|
|
Even better answer 5!
==============================
Nothing to say.
|
|
|
|
|
Hi,
I Replied. What were you going to do if I didn't??( Or of nobody Did?)
Shoot all those that did not reply?? This community is not one of little slaves kept locked up until you issue a demand for information!
Please read the Posting notes before you ask a question on this forum!
Bram van Kampen
|
|
|
|
|
<>&<a href=""></a><a href=""></a>[<a href="" target="_blank"></a>]
|
|
|
|
|
Your question only contains some tags.
Please edit your question.
0100000101101110011001000111001011101001
|
|
|
|
|
Hi everyone,
Have a nice day, please help me following concern
I know that, Function pointer in C++ can point to an address of global function, or static public function of a class
For example:
typedef float (MyFunction)(float a, float b);
//Global function
float add(float a, float b)
{
return a+b;
}
Class Math
{
public static float add(float a, float b)
{
return a+b;
}
}
void main(char*args[])
{
MyFunction*fp;
//Point to global function
fp = add;
printf("%f",fp(1,2))
//Point to public static function
fp = Math::add;
printf("%f",fp(5,10));
}
But it can not point to address of a function of a specified object.
For example, function add in calss Math is not static
Class Math
{
public float add(float a, float b)
{
return a+b;
}
}
The following is impossible (compile error)
void main(char*args[])
{
MyFunction*fp;
//Point to public function of specified object instance
Math*m = new Math();
fp = m->add;
printf("%f",fp(5,10));
}
But it is the thing i really want. Because i want to know function add is executed in context of what object (in this case we can know it is object m).
Above example is something like the concept Delegate in .NET.
Is there any design pattern to make such a delegate for C++?
Thanks,
Tin,
|
|
|
|
|
|