Portál AbcLinuxu, 30. dubna 2025 14:00

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
17.8.2009 11:16 Ivan
Rozbalit Rozbalit vše Dik za tip.
Odpovědět | Sbalit | Link | Blokovat | Admin

Ahoj diky za tip. Ten dbg::stack vypada dobre. Taky jsem se o neco takovyho pokousel:

Marka __HERE__ a __HERE__SHORT__ slouzi k identifikaci mista ve zdrojacich. Pouzivam to pri vyhazovani vyjimek. Mam vlastni typ pro vyjimku, ktera ma 1.  argument konstruktoru std::string.

A  pouzivam to takhle:

throw(OciException(__HERE__, "Not implemented yet\n"));

--- snap ---

#ifdef __GNUC__
        #define __HERE_SHORT__ ::std::string(((strrchr(__FILE__, '/') ?: __FILE__ - 1) + 1)) + ":"__HERE1__(__LINE__)
        #define __HERE__ ::trotl::str_backtrace() + __HERE3__(__LINE__, __FILE__)
        #define __HERE1__(x)   STR(x)"\t" + __PRETTY_FUNCTION__
        #define __HERE2__(x,y) ::std::string("("y":" STR(x)"(") +  __PRETTY_FUNCTION__ +")"
        #define __HERE3__(x,y) ::std::string("\n(") + __PRETTY_FUNCTION__ + ") " y ":" STR(x) + "\n"
        #define STR(a) #a
#else

...

inline ::std::string str_backtrace()
{
         ::std::stringstream ret;
#ifdef __GNUC__
        void *buffer[TROTL_BACKTRACE_DEPTH];

        int bsize = ::backtrace(buffer, TROTL_BACKTRACE_DEPTH);
        char **names = backtrace_symbols (buffer, bsize);
        for(int i=0; i<bsize; i++)
                ret << names[i] << std::endl;
        free(names);
#endif
        return ret.str();
}

--- snap ---

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.