<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">I'm developing a debugger for C++ dynamicly memory allocated with aspectC++. So i have to detect each execution of NEW and NEW [] opertors. For this, i did the '<FONT color=#c00000>NewDetectionAspect</FONT>' aspect.</FONT></FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P><SPAN lang=EN-GB><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
#ifndef</FONT></FONT><FONT size=2> FIRSTASPECT<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
#define</FONT></FONT><FONT size=2> FIRSTASPECT<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
#include</FONT></FONT><FONT size=2> </FONT><FONT color=#800000 size=2><FONT color=#800000 size=2><stdio.h><BR></FONT></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
#include</FONT></FONT><FONT size=2> </FONT><FONT color=#800000 size=2><FONT color=#800000 size=2><iostream><BR></FONT></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
#include</FONT></FONT><FONT size=2> </FONT><FONT color=#800000 size=2><FONT color=#800000 size=2><string.h><BR></FONT></FONT><FONT color=#008000 size=2><FONT color=#008000 size=2>
//securise la gestion de memoire afin de s'assurer qu'aucune autre gestion n'est en place (eviter les conflits) *globalement*<BR></FONT></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
void</FONT></FONT><FONT size=2>* </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>operator</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> (size_t size)<BR>
{<BR>
printf (</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"%s \n ligne : %lu - "</FONT></FONT><FONT size=2>,__FILE__, __LINE__);<BR>
printf(</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"\n changelment de l'opérateur new"</FONT></FONT><FONT size=2>); <BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>return</FONT></FONT><FONT size=2> malloc(size); <BR>
}<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
</FONT></FONT><FONT color=#008000 size=2><FONT color=#008000 size=2> <BR></FONT></FONT><FONT size=2>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>aspect</FONT></FONT><FONT size=2> NewDetectionAspect<BR>
{ <BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>void</FONT></FONT><FONT size=2> * ptr;<BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>int</FONT></FONT><FONT size=2> d;<BR>
FILE *F3;<BR>
<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
public</FONT></FONT><FONT size=2> :<BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>advice</FONT></FONT><FONT size=2> classes(</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"%"</FONT></FONT><FONT size=2>):</FONT><FONT color=#008000 size=2><FONT color=#008000 size=2>//securise la gestion de memoire afin de s'assurer qu'aucune autre gestion n'est en place (eviter les conflits)<BR></FONT></FONT><FONT size=2>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>slice</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>class</FONT></FONT><FONT size=2> newdelete<BR>
{<BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>public</FONT></FONT><FONT size=2>:<BR>
 <BR>
</FONT><FONT color=#008000 size=2><FONT color=#008000 size=2>//Assure que loperateur new n'a pas ete redefinit sinon le garbage collection ne peu fonctionner<BR></FONT></FONT><FONT size=2>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>void</FONT></FONT><FONT size=2>* </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>operator</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> (size_t size)<BR>
{ <BR>
printf (</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"%s \n ligne : %lu - "</FONT></FONT><FONT size=2>,__FILE__, __LINE__);<BR>
printf(</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"\n changelment de l'opérateur new"</FONT></FONT><FONT size=2>);<BR>
</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>return</FONT></FONT><FONT size=2> malloc(size); <BR>
}<BR><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
advice</FONT></FONT><FONT size=2> execution (</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"% ...::operator new(...)"</FONT></FONT><FONT size=2> ||<BR>
</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"% ...::operator new[](...)"</FONT></FONT><FONT size=2>) : before () {<BR>
printf (</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"executing heap operation \"%s\"\n"</FONT></FONT><FONT size=2>, JoinPoint::signature ());<BR>
printf (</FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>" tjp->that() is %s (should be 0)\n"</FONT></FONT><FONT size=2>, (tjp->that () ? </FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"not 0"</FONT></FONT><FONT size=2> : </FONT><FONT color=#800000 size=2><FONT color=#800000 size=2>"0"</FONT></FONT><FONT size=2>));<BR>
}<BR></FONT>
<BR>
</FONT><FONT size=2>};</FONT><BR>
<FONT size=2></FONT> <BR>
<FONT size=2> <BR></FONT></SPAN>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">The aspect working well, but i want to change the comportment of New operator for return two arguments, the first is the line where New/New [] operator was executed, and the second is the file where it is executed.</FONT></FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3></FONT></SPAN> </P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3>I did an sample but not with an spectC++ aspect, it is just with a normal C++ class and a header file. it s working well..i can detect each execution line and file of new[]/new operator. The pricipe is like this : </P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">change New operator Prototype<SPAN>  </SPAN>by adding two arguments for line and file in a header file <U>"halloc.h": </U></FONT></FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">#<SPAN>  </SPAN>include</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> <SPAN style="COLOR: maroon"><string.h></SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">#<SPAN>    </SPAN>include</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> <SPAN style="COLOR: maroon"><new></SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'"> </SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'"> </SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>     </SPAN><SPAN style="COLOR: blue">void</SPAN>* <SPAN style="COLOR: blue">operator</SPAN> <SPAN style="COLOR: blue">new</SPAN> (size_t size, <SPAN style="COLOR: blue">const</SPAN> <SPAN style="COLOR: blue">char</SPAN>* nom_fich, <SPAN style="COLOR: blue">const</SPAN> <SPAN style="COLOR: blue">unsigned</SPAN> <SPAN style="COLOR: blue">long</SPAN> num_ligne)</SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>       </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">throw</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> (std::bad_alloc);</SPAN></P>
<P class=ecxMsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>      </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN> </SPAN><SPAN lang=EN-GB style="COLOR: blue">#define</SPAN><SPAN lang=EN-GB> <SPAN style="COLOR: blue">new</SPAN> <SPAN style="COLOR: blue">new</SPAN> (__FILE__, __LINE__)</SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> </SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> </SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">And develop it in <U>hello.cpp:</U></FONT></FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">#include</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> <SPAN style="COLOR: maroon">"halloc.h"</SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">#undef</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> <SPAN style="COLOR: blue">new</SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"> </SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'">void</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">* <SPAN style="COLOR: blue">operator</SPAN> <SPAN style="COLOR: blue">new</SPAN> (size_t size, <SPAN style="COLOR: blue">const</SPAN> <SPAN style="COLOR: blue">char</SPAN>* nom, <SPAN style="COLOR: blue">const</SPAN> <SPAN style="COLOR: blue">unsigned</SPAN> <SPAN style="COLOR: blue">long</SPAN> ligne)</SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>  </SPAN><SPAN style="COLOR: blue">throw</SPAN> (std::bad_alloc)</SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">{</SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>  </SPAN><SPAN style="COLOR: blue">void</SPAN>*ptr= <SPAN style="COLOR: blue">new</SPAN> <SPAN style="COLOR: blue">char</SPAN>;</SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> </SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>      </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">printf (<SPAN style="COLOR: maroon">"%s:%lu - "</SPAN>,nom, ligne);</SPAN></P>
<P class=ecxMsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>    </SPAN><SPAN style="COLOR: blue">return</SPAN> ptr;<SPAN style="COLOR: green">// MallocSecurise (size, nom, ligne);</SPAN></SPAN></P>
<P class=ecxMsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">}</SPAN></P>
<P class=ecxMsoNormal><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN> </P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">Some one can help me for resolve this problem, and made an aspect/advice/slice for detect the line and the file for a new operator ??</FONT></FONT></SPAN></P>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT size=3><FONT face="Times New Roman">Thank u very much, Heni.</FONT></FONT></SPAN></P></SPAN></FONT></SPAN><SPAN lang=EN-GB><FONT face="Times New Roman" size=3>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3> </FONT></SPAN></P></FONT></SPAN>
<P class=ecxMsoNormal><SPAN lang=EN-GB><FONT face="Times New Roman" size=3></FONT></SPAN> </P>                                         <br /><hr />Windows Live Hotmail:  <a href='http://www.microsoft.com/middleeast/windows/windowslive/see-it-in-action/social-network-basics.aspx?ocid=PID23461::T:WLMTAGL:ON:WL:en-xm:SI_SB_4:092009' target='_new'>Your friends can get your Facebook updates, right from Hotmail®.</a></body>
</html>