Qualcuno ha conosciuto il link del codice sorgente C++ filt. Voglio chiamare C++ filt nel mio codice come libreria.dov'è il codice sorgente C++ filt?
risposta
Su Linux è possibile utilizzare /usr/include/demangle.h
che viene fornito con binutils-dev
pacchetto. Dovrai collegarti allo libiberty
da binutils
.
è parte di binutils:
Attribuite compilatori diversi possono manipolare in modo diverso, ognuno tende a spedire con un costume C++ filt. Ma la maggior parte dei sistemi ha già una funzione di libreria demangling disponibile da qualche parte. Sulla mia macchina Linux ho trovato /usr/include/c++/version/cxxabi.h header che definisce __cxa_demangle() (vedi http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html). Pensavo di aver usato qualche altra funzione in passato, però, ma non riesco a trovare i dettagli (EDIT: probabilmente la versione demangle dei documenti di Ismail). Su AIX c'è un demangle.h.
EDIT: sulla maggior parte dei sistemi con programmi pstack e C++ FILT (ad esempio Linux e Solaris), il seguente dovrebbe funzionare ...
#include <cstdio>
#include <iostream>
#include <sstream>
struct X
{
void f()
{
std::ostringstream cmd;
cmd << "pstack " << getpid() << " | c++filt";
if (FILE* f = popen(cmd.str().c_str(), "r"))
{
char buffer[1024];
int n;
while ((n = fread(buffer, 1, sizeof buffer, f)) > 0)
std::cout.write(buffer, n);
}
else
std::cerr << "popen() failed\n";
}
};
int main()
{
X x;
x.f();
}
... uscita ...
#0 0x003539be in __read_nocancel() from /lib/tls/i686/libc.so.6
#1 0x002ff590 in _IO_file_read_internal() from /lib/tls/i686/libc.so.6
#2 0x002fe522 in _IO_new_file_underflow() from /lib/tls/i686/libc.so.6
#3 0x00300371 in __underflow() from /lib/tls/i686/libc.so.6
#4 0x0030079d in _IO_default_xsgetn_internal() from /lib/tls/i686/libc.so.6
#5 0x00300733 in _IO_sgetn_internal() from /lib/tls/i686/libc.so.6
#6 0x002f666c in fread() from /lib/tls/i686/libc.so.6
#7 0x08048c36 in X::f()
#8 0x08048ac0 in main()
noti che __read_nocancel ecc non sono C++ - identificatori straziati: sono i nomi delle funzioni C solo interni, utilizzando il riservato-per-implementazione leader-sottolineatura-e-maiuscolo lettere o convensions leader del doppio di sottolineatura.
X::f()
era un identificatore maciullato e è stato demangled.
che ne dici di solaris, il printtack non si limita a squarciare. dovrei stampare stack su pipe e leggere, demangle il msg? –
@dma: codice di esempio sopra - testato sotto Linux ma dovrebbe funzionare su Solaris. Saluti. –
Mi piace il collegamento libstdC++. Ma non posso in buona coscienza dare un +1 a qualcosa che sostiene l'uso di 'popen()' come questo. : P – asveikau
- 1. C codice sorgente libreria
- 2. Esistono strumenti per trasformare il codice sorgente in C++ nel codice sorgente in C/C++, ma con modelli istanziati (srotolati)?
- 3. Golang: proteggere il codice sorgente
- 4. Buon browser di codice sorgente per C
- 5. Codice sorgente C in documento Latex
- 6. parsing del codice sorgente C++ nell'ambiente java
- 7. Beautifier codice sorgente per C++ (vC++)?
- 8. Esempi di codice sorgente SharpSvn e C#
- 9. Grammatica C nel codice sorgente GCC
- 10. Esiste un programma che offusca il codice sorgente C#?
- 11. dove trovare il codice sorgente per la libreria standard C++
- 12. Impossibile aprire il codice sorgente C delle funzioni di Emacs
- 13. Codice sorgente offuscamento
- 14. annotazione Perf, visualizza solo il codice sorgente
- 15. GNU GSL dove trovo il codice sorgente?
- 16. Ottieni AST da. Assemblaggio Net senza codice sorgente (codice IL)
- 17. Eclipse: è possibile modificare il codice sorgente Java conosciuto tramite il codice sorgente "allegato"
- 18. Codice sorgente R. Chiamata funzione
- 19. Come indentare automaticamente il codice sorgente?
- 20. visualizza il codice sorgente in R
- 21. Impedisci il furto del codice sorgente HTML
- 22. Come indicizzare il codice sorgente con ElasticSearch
- 23. Come ottengo il codice sorgente di Ubuntu?
- 24. Come modificare il codice sorgente utilizzando Roslyn?
- 25. Come scaricare il codice sorgente di Eclipse?
- 26. Trovare il codice sorgente di cromo
- 27. Profiler Golang non trova il codice sorgente
- 28. Ignorare il codice sorgente nel debugger
- 29. Stampa il codice sorgente su Windows
- 30. Perché viene visualizzato il codice sorgente PHP?
non c'è /usr/include/demangle.h sul mio linux ... – Walter