Hi Zachary,

I tried to compile the following MWE

#include "llvm/Support/Signals.h"
#define __STDC_LIMIT_MACROS
#define __STDC_CONSTANT_MACROS
#include "llvm/Support/raw_ostream.h"

int main() {
  llvm::sys::PrintStackTrace(llvm::errs());
}

using the following command:

clang++ -std=c++11 -stdlib=libc++ -I/pds/opt/llvm/include mwe.cpp -o main -lc++ 
-lc++abi /pds/opt/llvm/lib/libLLVMSupport.a

This throws an error about missing the pthread library, so I add “-lpthread” to 
the end of the above line. However, this results in many, may errors like this:

/pds/opt/llvm/lib/libLLVMSupport.a(Debug.cpp.o): In function 
`llvm::isCurrentDebugType(char const*)':
/pds/opt/install/llvm/llvm-20150720-r242680-src/lib/Support/Debug.cpp:(.text._ZN4llvm18isCurrentDebugTypeEPKc+0xd7):
 undefined reference to `std::string::compare(char const*) const'
/pds/opt/llvm/lib/libLLVMSupport.a(Triple.cpp.o): In function 
`llvm::Triple::getLittleEndianArchVariant() const':
/pds/opt/install/llvm/llvm-20150720-r242680-src/lib/Support/Triple.cpp:(.text._ZNK4llvm6Triple26getLittleEndianArchVariantEv+0xb):
 undefined reference to `std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::basic_string(std::string const&)’
…

Any idea what I’m doing wrong?

Regards,

Michael
On 28 Jul 2015, at 08:24 , Zachary Turner 
<ztur...@google.com<mailto:ztur...@google.com>> wrote:

#include "llvm/Support/Process.h"  // I think it's in process.h, going from 
memory here.

void foo()
{
  llvm::sys::printStackTrace(llvm::outs);  // print to stdout
}

If you want to write it to a std::string instead you can use an 
llvm::raw_string_ostream.

If you need more help I can do so tomorrow or Wednesday when I'm back in the 
office.  The above should work across multiple platforms though (Windows, Mac, 
Linux) and be fully symbolized (if your program is built with debug information)

On Mon, Jul 27, 2015 at 11:14 PM Schlottke-Lakemper, Michael 
<m.schlottke-lakem...@aia.rwth-aachen.de<mailto:m.schlottke-lakem...@aia.rwth-aachen.de>>
 wrote:
That would work for me too - I just did not know that there is such a 
capability in LLVM itself. I believe I found the printStackTrace method to be 
in libLLVMSupport.a. Would you happen to know what I have to do (or where to 
find more help) to make use of it?

Michael

PS: Maybe this is getting too OT; if yes, please let me know.
________________________________________
From: Zachary Turner [ztur...@google.com<mailto:ztur...@google.com>]
Sent: Tuesday, July 28, 2015 7:13 AM
To: Schlottke-Lakemper, Michael; 
lldb-dev@cs.uiuc.edu<mailto:lldb-dev@cs.uiuc.edu>
Subject: Re: [lldb-dev] Use lldb.so to create stack trace

Instead of linking lldb.so, which is basically an entire debugger, maybe you 
could just link llvm?  I don't remember which library has the stack trace 
function in llvm, but the function I believe is called 
llvm::sys::printStackTrace().  This will give you a much smaller overhead than 
bringing in all of lldb unnecessarily.

On Mon, Jul 27, 2015 at 10:12 PM Schlottke-Lakemper, Michael 
<m.schlottke-lakem...@aia.rwth-aachen.de<mailto:m.schlottke-lakem...@aia.rwth-aachen.de><mailto:m.schlottke-lakem...@aia.rwth-aachen.de<mailto:m.schlottke-lakem...@aia.rwth-aachen.de>>>
 wrote:
Hi folks,

We are looking for a way to use lldb.so to print out a stack trace 
programmatically. In our scientific simulation tool (written in C++) ,  we use 
a custom terminate function where we are already able to print stack traces in 
case of an abnormal abort, which uses some gcc-specific magic.

My idea is to link our tool to lldb.so when compiling for debugging and to use 
the library to print a stack trace programmatically, including demangled names 
and correct line numbers. However, I don't really know how to start thus I am 
wondering

- has someone here done or seen something like this before?
- is there a tutorial for linking to lldb.so and making use of it through C++?
- would this also work when compiling with other compilers than clang?

Any help or pointers to relevant projects/documentation etc is greatly 
appreciated!

Regards,

Michael

--
Michael Schlottke-Lakemper

SimLab Highly Scalable Fluids & Solids Engineering
Jülich Aachen Research Alliance (JARA-HPC)
RWTH Aachen University

Wüllnerstraße 5a
52062 Aachen
Germany

Phone: +49 (241) 80 95188
Fax: +49 (241) 80 92257
Mail: 
m.schlottke-lakem...@aia.rwth-aachen.de<mailto:m.schlottke-lakem...@aia.rwth-aachen.de><mailto:m.schlottke-lakem...@aia.rwth-aachen.de<mailto:m.schlottke-lakem...@aia.rwth-aachen.de>>
Web: http://www.jara.org/jara-hpc

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu<mailto:lldb-dev@cs.uiuc.edu><mailto:lldb-dev@cs.uiuc.edu<mailto:lldb-dev@cs.uiuc.edu>>
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to