Could anybody be kindly to solve the Code Profiler problem which will cause the whole CodeBlocks crash during using it in C Language ?
But when using it in C++ Language, Code Profiler works well. Why? :?
Another topic ( using code profiler in C - crash! (svn 7071) http://forums.next.codeblocks.org/index.php/topic,14430.msg97128/topicseen.html#msg97128 (http://forums.next.codeblocks.org/index.php/topic,14430.msg97128/topicseen.html#msg97128) ) solve the "codesnippets building problem" in Linux X86_64 system.
David.
Does it happen with a "hello world" project or it happens only with complex projects?
Quote from: wangdong1226 on March 31, 2011, 04:11:43 PM
Could anybody be kindly to solve the Code Profiler problem which will cause the whole CodeBlocks crash during using it in C Language ?
What is exactly your problem? Profiling works fine for me. Sample project? Step-by-step instructions? Please provide more information.
Quote from: MortenMacFly on March 31, 2011, 08:25:53 PM
Quote from: wangdong1226 on March 31, 2011, 04:11:43 PM
Could anybody be kindly to solve the Code Profiler problem which will cause the whole CodeBlocks crash during using it in C Language ?
What is exactly your problem? Profiling works fine for me. Sample project? Step-by-step instructions? Please provide more information.
I just tested it on linux with a wizard created c-console project and it crashes.
I look into it.
The crash happens, because the output is empty (except for the headers) and parsing for Call graph data starts beyond the array boundary.
Should be fixed in svn r7075.
Jens, probably you should add a check at line 108, too...
Quote from: oBFusCATed on April 01, 2011, 01:49:43 AM
Jens, probably you should add a check at line 108, too...
I don't think it's needed, because
count is initialized with zero and can not be out of boundary here (we check for empty arrays in line 99).
Dear Jens,
Thank you for your effort. CodeBlocks-svn7075 has solved the crash problem when using code profiler in C language.
But, there a little bit strange:
When I using Code Profiler in C language, every time when I tried different .c file, and each time I build it and run it, but I got an empty output all the same. :shock:
for example:
----------------
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
----------------
Am I wrong somewhere?
Best regards.
David.
No, you are not wrong, but that was the cause for the crash.
If you try gprof from console with a simple wizard-create hello world project it is in fact empty:
jens@debian-inspiron:/tmp/testc$ gprof bin/Debug/testc gmon.out
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
But if you add a simple call to a function of your own, you get some output.
Maybe the C-libraries of debian (and ubuntu/mint) are not build with -pg flag set.
By the way: please use code-tags if you paste sources or console output, it's much better readable.
wangdong1226:
Keep in mind that gprof works only for CPU intensive profiling and doesn't work with static libraries.
If you have blocking syscalls, sleeps or something like this, gprof won't be usable.
OK, understand.
Thank you very much for your kindness, Jens and oBFusCATed. :P
I compared the codeblocks on MinGW & XP and codeblocks on Fedora14 x86_64, the same simple .c file, the code profiler's result is different.
1). codeblocks on MinGW & XP, simple .c file:
#include <stdio.h>
int main()
{
float f1 = 3.0;
double d2 = 3.0;
long l3 = 2000000000;
long l4 = 1234567890;
printf("%.1e %.1e %.1ld %.1ld\n", f1, d2, l3, l4);
printf("%ld %ld\n", l3, l4);
printf("%e %.1e %ld %ld\n", f1, d2, l3, l4);
return 0;
}
built and ran, then I got code profiler result as follows:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
100.00 0.01 0.01 __mingw_pformat
0.00 0.01 0.00 3 0.00 0.00 __gcc_deregister_frame
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
Call graph (explanation follows)
granularity: each sample hit covers 4 byte(s) for 100.00% of 0.01 seconds
index % time self children called name
<spontaneous>
[1] 100.0 0.01 0.00 __mingw_pformat [1]
-----------------------------------------------
0.00 0.00 3/3 main [119]
[3] 0.0 0.00 0.00 3 __gcc_deregister_frame [3]
-----------------------------------------------
This table describes the call tree of the program, and was sorted by
the total amount of time spent in each function and its children.
Each entry in this table consists of several lines. The line with the
index number at the left hand margin lists the current function.
The lines above it list the functions that called this function,
and the lines below it list the functions this one called.
This line lists:
index A unique number given to each element of the table.
Index numbers are sorted numerically.
The index number is printed next to every function name so
it is easier to look up where the function in the table.
% time This is the percentage of the `total' time that was spent
in this function and its children. Note that due to
different viewpoints, functions excluded by options, etc,
these numbers will NOT add up to 100%.
self This is the total amount of time spent in this function.
children This is the total amount of time propagated into this
function by its children.
called This is the number of times the function was called.
If the function called itself recursively, the number
only includes non-recursive calls, and is followed by
a `+' and the number of recursive calls.
name The name of the current function. The index number is
printed after it. If the function is a member of a
cycle, the cycle number is printed between the
function's name and the index number.
For the function's parents, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the function into this parent.
children This is the amount of time that was propagated from
the function's children into this parent.
called This is the number of times this parent called the
function `/' the total number of times the function
was called. Recursive calls to the function are not
included in the number after the `/'.
name This is the name of the parent. The parent's index
number is printed after it. If the parent is a
member of a cycle, the cycle number is printed between
the name and the index number.
If the parents of the function cannot be determined, the word
`<spontaneous>' is printed in the `name' field, and all the other
fields are blank.
For the function's children, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the child into the function.
children This is the amount of time that was propagated from the
child's children to the function.
called This is the number of times the function called
this child `/' the total number of times the child
was called. Recursive calls by the child are not
listed in the number after the `/'.
name This is the name of the child. The child's index
number is printed after it. If the child is a
member of a cycle, the cycle number is printed
between the name and the index number.
If there are any cycles (circles) in the call graph, there is an
entry for the cycle-as-a-whole. This entry shows who called the
cycle (as parents) and the members of the cycle (as children.)
The `+' recursive calls entry shows the number of function calls that
were internal to the cycle, and the calls entry for each member shows,
for that member, how many times it was called from other members of
the cycle.
Index by function name
[3] __gcc_deregister_frame [1] __mingw_pformat
2). codeblocks on Fedora14 x86_64 & the same simple .c file,
built and ran, then I got code profiler result as follows:
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
So, I think as Jens said, the C-libraries of debian (and ubuntu/mint includes Fedora) are not built with -pg flag set.
Maybe later, when I have time, I'll try to learn to build C-libraries of Fedora with the -pg flag set.
wangdong1226: read the gprof manual and you'll understand why the profile is empty....
Quote from: oBFusCATed on April 02, 2011, 12:56:38 PM
wangdong1226: read the gprof manual and you'll understand why the profile is empty....
OK, thanks oBFusCATed :P
I'll read the gprof manual.
Best regards.
David.