<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Adresse der aktuellen Funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>für ein Logfile benötige ich die Adresse der Funktion in der sich das Programm gerade befindet. In einer Klasse z.B. arbeite ich mit dem this-Pointer, aber die Adresse der Konstruktoren und Memberfunktionen bekomme ich nicht raus, es sein denn, dass Sie keine Argumente erwarten (this-&gt;Function). Sobald eine Funktion Parameter enthält weiss ich nicht mehr weiter.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150319/adresse-der-aktuellen-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 16:10:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150319.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Jun 2006 10:34:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 10:34:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für ein Logfile benötige ich die Adresse der Funktion in der sich das Programm gerade befindet. In einer Klasse z.B. arbeite ich mit dem this-Pointer, aber die Adresse der Konstruktoren und Memberfunktionen bekomme ich nicht raus, es sein denn, dass Sie keine Argumente erwarten (this-&gt;Function). Sobald eine Funktion Parameter enthält weiss ich nicht mehr weiter.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078071</guid><dc:creator><![CDATA[NULL]]></dc:creator><pubDate>Thu, 15 Jun 2006 10:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:00:55 GMT]]></title><description><![CDATA[<p>Ich hab' grad</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class foo {

	private:

		int bar;

	public:

		foo( int bar ) : bar( bar ) { };
		int get_bar( ) { return bar; };
		void set_bar( int bar_to_set ) { bar = bar_to_set; }
		void test( ) { cout &lt;&lt; &quot;foo::test( ): &quot; &lt;&lt; hex &lt;&lt; this-&gt;test &lt;&lt; endl; };
};

int main( )
{
	foo bar;
	bar-&gt;test;

	return 0;
}
</code></pre>
<p>probiert und bekomme statt der erwarteten Adresse von this-&gt;test nur<br />
&quot;fatal error C1001: INTERNER COMPILERFEHLER&quot; (Compilerdatei &quot;msc1.cpp&quot;, Zeile 2844) Wählen Sie im Menü &quot;?&quot; von Visual C++ den Befehl &quot;Software Service&quot;, oder öffnen Sie die Hilfedatei für den Software Service, um weitere Informationen zu erhallten.&quot;</p>
<p>Jetzt würd's mich auch interessieren...</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078123</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:16:21 GMT]]></title><description><![CDATA[<p>willkommen in der welt des ICE <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
auch wenn hier eigentlich nichts besonderes ist (für gewöhnlich sind da immer templates im spiel).</p>
<pre><code class="language-cpp">void test( ) { cout &lt;&lt; &quot;foo::test( ): &quot; &lt;&lt; hex &lt;&lt; this-&gt;test &lt;&lt; endl; };
</code></pre>
<p>ein closure a.b bzw. a-&gt;b, wenn b eine memberfunktion ist, kann in standard C++ nur auf eine einzige weise verwendet werden: indem man den funktionsaufruf operator daruf anwendet. alles andere ist schlicht ein fehler.(in main fehlen die klammern übrigens auch - ausserdem hat foo keinen default-konstruktor).</p>
<p>C++ kennt den begriff der &quot;adresse&quot; bezogen auf funktionen eigentlich nicht. für namespace- oder statische klassenfunktionen ist ein funktionspointer in der regel äquivalent zu einem objektpointer. für nicht-statische memberfunktionen dagegen gibt es in standard C++ kein mittel, auch nur so etwas änliches wie eine adresse zu erhalten.</p>
<p>P.S. msvc vor der version 8 hat die unangenehme angewohnheit, solche konstrukte implizit in einen pointer-auf-memberfunktion umzuwandeln - das ist nicht standardgemäß und ine hässliche sache, weil man die klammern gelegentlich einfach nur vergisst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078130</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:16:09 GMT]]></title><description><![CDATA[<p>hi,<br />
meint ihr etwa das ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void demo(void)
{
    cout &lt;&lt; demo &lt;&lt; endl;
}

int main()
{
    demo();
    cout &lt;&lt; endl &lt;&lt; demo &lt;&lt; endl; // das gleiche^^
    return (0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1078132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078132</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:19:35 GMT]]></title><description><![CDATA[<p>sowas suche ich nur für Klassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich möchte in dem Logfile festhalten, welche Adresse die aktuelle Funktion (Konstruktor oder Memberfunktionen) haben. Wenn das Programm einmal abstürzen sollte, dann zeigt Windows in der Regel die Adresse an. So kann man den Rahmen etwas eingrenzen. this-&gt;Funktion ohne Parameter klappt auch ganz wunderbar. Nur wenn es jetzt um überladene Memberfunktionen geht oder generell um Funktionen mit Argumenten, dann bin ich am Ende meines Wissens angelangt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078135</guid><dc:creator><![CDATA[NULL]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:27:07 GMT]]></title><description><![CDATA[<p>vl. sowas?<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-146248-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-146248-and-highlight-is-.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078138</guid><dc:creator><![CDATA[xGhost(aus_log)]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:27:07 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:35:03 GMT]]></title><description><![CDATA[<p>xGhost(aus_log) schrieb:</p>
<blockquote>
<p>vl. sowas?<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-146248-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-146248-and-highlight-is-.html</a></p>
</blockquote>
<p>leider nein. Mit Boost möchte ich nicht arbeiten. Ehrlich gesagt, habe ich gedacht, dass es ganz einfach ist die Adressen zu bekommen ^^ So kann man(n) sich irren....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078146</guid><dc:creator><![CDATA[NULL]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:40:06 GMT]]></title><description><![CDATA[<p>NULL schrieb:</p>
<blockquote>
<p>sowas suche ich nur für Klassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich möchte in dem Logfile festhalten, welche Adresse die aktuelle Funktion (Konstruktor oder Memberfunktionen) haben. Wenn das Programm einmal abstürzen sollte, dann zeigt Windows in der Regel die Adresse an. So kann man den Rahmen etwas eingrenzen. this-&gt;Funktion ohne Parameter klappt auch ganz wunderbar. Nur wenn es jetzt um überladene Memberfunktionen geht oder generell um Funktionen mit Argumenten, dann bin ich am Ende meines Wissens angelangt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>wenn des log während des programmlaufs aktualisiert werden soll, könntest du die __FILE__ und __LINE__ macros einsetzen. um mit adressen eines absturzes etwas anzufangen, solltest du für das programm in kompilierter form (so wie du sie weitergibst) und die zugehörige symboltabelle sichern (bei debugbuilds ist diese tabelle gewöhnlich bestandteil des executables, das ist aber nicht notwendig). dann kannst du diese später in den debugger laden und der adresse die betreffende stelle des source codes zuordnen. wie bereits erwähnt - es gibt in standard C++ keine legale möglichkeit, die adresse einer nicht-statischen klassenfunktion zu erhalten (zumal die gerade bei konstruktoren und destruktoren nichtmal eindeutig sein muss).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078148</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 12:44:51 GMT]]></title><description><![CDATA[<p>Sowas in der Richtung mache ich auch. Ich dachte nur, dass es einfacher ist die aktuelle Adresse der Funkction mitzuloggen.</p>
<p>Momentan sieht es so aus :</p>
<pre><code class="language-cpp">CDocument::CDocument(CEis *lpEis)
          :COrderInfo(lpEis-&gt;GetMySQLClass())
{
	//Logging ?
	if (lpEis-&gt;GetDeveloperLog())
		lpEis-&gt;AddLog(&quot;CDocument::CDocument(%p) :COrderInfo(%p) Adress : %p&quot;, lpEis, lpEis-&gt;GetMySQLClass(), this);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1078150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078150</guid><dc:creator><![CDATA[NULL]]></dc:creator><pubDate>Thu, 15 Jun 2006 12:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 17:55:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Danke für die Aufklärung!</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078411</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 15 Jun 2006 17:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Thu, 15 Jun 2006 22:46:54 GMT]]></title><description><![CDATA[<p>Wie wärs wenn du das Programm &quot;einfach&quot; über einen Loader startest der dir dann einen Stacktrace liefert?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078580</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Thu, 15 Jun 2006 22:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Fri, 16 Jun 2006 14:16:48 GMT]]></title><description><![CDATA[<p>FireFlow schrieb:</p>
<blockquote>
<p>Wie wärs wenn du das Programm &quot;einfach&quot; über einen Loader startest der dir dann einen Stacktrace liefert?</p>
<p>Gruß</p>
</blockquote>
<p>Das klingt spannend, aber ich habe keine Ahnung wovon Du redest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich habe mich damit erstmal abgefunden und so ist es auch ok. Sollte eine Zugriffverletzung auftreten, dann sehe ich die letzte Klasse bzw. Memberfunktion in dem Logfile. Leider ohne Adresse, aber so geht es auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1078967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078967</guid><dc:creator><![CDATA[NULL]]></dc:creator><pubDate>Fri, 16 Jun 2006 14:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse der aktuellen Funktion on Fri, 16 Jun 2006 14:59:25 GMT]]></title><description><![CDATA[<p>unter windows kannste sowas versuchen:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;

int e (EXCEPTION_POINTERS *p)
{
   printf (&quot;absturz an adresse %08lx\n&quot;, p-&gt;ExceptionRecord-&gt;ExceptionAddress);
   return 1;
}

void main (void)
{
   __try
   {
      *(int*)0 = 0;  // crash
   }
   __except (e (GetExceptionInformation()))
   {

   } 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1078994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1078994</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 16 Jun 2006 14:59:25 GMT</pubDate></item></channel></rss>