[llvm-dev] [llvm][debug][jit] llvm-project debug jit-ed code

Stefan Gränitz via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 17 03:32:53 PDT 2021


Hello Alex, I am adding llvm-dev (cc) as other people might have similar
questions.

If I understand correctly, debugging works with lli if you follow the
instructions from https://www.llvm.org/docs/DebuggingJITedCode.html
That's a good first step, because now the only question is what's the
difference between lli and your code in main.cpp.

>From what you describe I don't see an obvious problem. You say debugging
main.cpp itself works fine. Here's a few things you can try to narrow
down the problem:

* Set a breakpoint in the constructor of MCJIT and make sure
RegisterJITEventListener() is called.
* Set a breakpoint in GDBJITRegistrationListener::notifyObjectLoaded()
and check that the call to getObjectForDebug() returns a non-null result.
* Enable logging for the JIT interface in LLDB and check that you get
output like this:

(lldb) b my_func
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) log enable lldb jit
(lldb) run
 JITLoaderGDB::SetJITBreakpoint looking for JIT register hook
 JITLoaderGDB::SetJITBreakpoint setting JIT breakpoint
Process 46448 launched: '/path/to/main' (x86_64)
 JITLoaderGDB::JITDebugBreakpointHit hit JIT breakpoint
 JITLoaderGDB::ReadJITDescriptorImpl registering JIT entry at
0x10e019830 (2872 bytes)
1 location added to breakpoint 1

Does that help?

Best
Stefan

On 17/03/2021 09:21, Alex wrote:
> Hello
>
> My name is Alex Fedchenko.
>
> I try work with JIT-ed code.
> As I see you work with llvm-project.
> Could you help me with debugging IR-code.
>
> Now I try is use combination with llvm::Module/ llvm::ExecutionEngine/
> llvm::Function successful.
> But I want debugging this code.
> I can debug code from main.cpp , but I do not know how I can debug
> code from my.ll file.
>
> I try explain what I can do ...
>
> I have file "my.c" with function "int my_func(int v)"
> I created file my.ll use command "clang -g -c -S -emit-llvm my.c"
>
> 1)
> If I write simple main.c file like:
>
> extern int my_func(int v);
>
> int main() {
>     for( int i = 0; i < 10; i++) {
>         int n = -1;
>         n = my_func( i );
>     }
>
>     return 0;
> }
>
> And create mail.ll use command "clang -g -c -S -emit-llvm main.c"
> Then I linked my.ll and mail.ll use command "llvm-link my.ll main.ll
> -o all.ll"
>
> After that I can debugging my_func using gdb or lldb-12
> (instruction here:  https://www.llvm.org/docs/DebuggingJITedCode.html
> <https://www.llvm.org/docs/DebuggingJITedCode.html>)
> It is work fine (about debug process).
>
> BUT
> 2)
> When I write main.cpp file, where I use llvm::Module/
> llvm::ExecutionEngine/ llvm::Function
> like:
>
> int main(int argc, char const *argv[]) {
>     ...
>     std::unique_ptr<llvm::Module> mod = llvm::parseIRFile( "my.ll",
> error, context );
>     llvm::ExecutionEngine *executionEngine = llvm::EngineBuilder(
> std::move( mod )).create();
>     ...
>     llvm::Function *f =
> executionEngine->FindFunctionNamed(llvm::StringRef("my_func"));
>     ...
>     llvm::GenericValue res = executionEngine->runFunction( f, arg );
>     ...
>     
> I CAN NOT DUBUD my_func :(
> I build main.cpp : "clang++ -g main.cpp -O0 -o main"
> I can debug main.cpp using gdb or lldb, but I can not set breakpoint
> in my_func and debug my_func :(
> ("./main" - work fine)
>
> Could you help me?
> Maybe you have any ideas how we can debug function what was load from
> Module and called over ExecutionEngine?
> Maybe you know any person who can help me?
> Or may be exist another way where we can called function from ll-file
> and debugged it from another running application (in debug mode).
>
> Thank you for your response
>
> Best regards
> Alex F. 

-- 
https://flowcrypt.com/pub/stefan.graenitz@gmail.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210317/24747896/attachment.html>


More information about the llvm-dev mailing list