[LLVMdev] gdb + clang/llvm
Jim Grosbach
grosbach at apple.com
Mon Apr 23 14:45:42 PDT 2012
On Apr 23, 2012, at 2:14 PM, Roland Leißa <leissa at cs.uni-saarland.de> wrote:
>>> ok, I now have a problem in the code generator.
>>> Let's say I want to set a breakpoint somewhere in
>>> clang/lib/CodeGen/CGExprScalar.cpp
>>>
>>> What do I have to do in order to trigger breakpoints, see
>>> backtraces and so on?
>>
>> You set a breakpoint and ask to see a backtrace?
>>
>> -eric
>
> haha, OK, I think I should be more specific.
>
> So, I configured the project with:
> ../llvm/configure --prefix=PROJECT_DIR/install_debug --enable-expensive-checks --enable-targets=host --enable-debug-runtime --enable-shared CXX=g++ CC=gcc
>
> note that I'm using gcc
>
> then I run
> make
> make install
>
> next I fire up gdb
> setting a breakpoint somewhere in clang/lib/Sema only works if executing clang with -cc1
> Now the code generation of clang doesn't seem to happen just with -cc1, so I have to elide the switch when having problems somewhere in this area.
Eh? Codegen most certainly should happen when run with cc1.
Eliding the option is never the right choice when debugging, unless you're debugging the driver itself.
> Let's say I have a problem in
> clang/lib/CodeGen/CGExprScalar.cpp, line 2742
> I put
> llvm::errs() << "test\n";
> there in order to verify that this line is really getting executed.
> Then, I set the breakpoint
> break CGExprScalar.cpp :2742
> and run clang:
> r -std=c++11 simple.cpp
>
>
> I'm getting this output:
>
> Starting program: /home/rleissa/projects/test/build_debug/Debug+Asserts+Checks/bin/clang -std=c++11 simple.cpp
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/libthread_db.so.1".
> test
> clang: /home/rleissa/projects/test/llvm/lib/VMCore/Instructions.cpp:1475: llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, const llvm::Twine&, llvm::Instruction*): Assertion `isValidOperands(Vec, Elt, Index) && "Invalid insertelement instruction operands!"' failed.
> 0 libLLVM-3.2svn.so 0x00007ffff686f9bd
> 1 libLLVM-3.2svn.so 0x00007ffff686f715
> 2 libpthread.so.0 0x00007ffff586f140
> 3 libc.so.6 0x00007ffff4ae1c35 gsignal + 53
> 4 libc.so.6 0x00007ffff4ae30b8 abort + 328
> 5 libc.so.6 0x00007ffff4adac12
> 6 libc.so.6 0x00007ffff4adacc2
> 7 libLLVM-3.2svn.so 0x00007ffff6a1a7b3 llvm::InsertElementInst::InsertElementInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) + 175
> 8 clang 0x0000000000b64b35
> 9 clang 0x0000000000b66e5e
> 10 clang 0x0000000000b997b7
> 11 clang 0x0000000000ba386d
> 12 clang 0x0000000000ba2c91
> 13 clang 0x0000000000b9496d
> 14 clang 0x0000000000ba1a40 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 176
> 15 clang 0x0000000000c03875 clang::CodeGen::CodeGenFunction::EmitReturnStmt(clang::ReturnStmt const&) + 683
> 16 clang 0x0000000000c01084 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*) + 742
> 17 clang 0x0000000000c014ff clang::CodeGen::CodeGenFunction::EmitCompoundStmt(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) + 241
> 18 clang 0x0000000000c012d6 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*) + 226
> 19 clang 0x0000000000c00de9 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*) + 75
> 20 clang 0x0000000000c19808 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::CodeGen::FunctionArgList&) + 154
> 21 clang 0x0000000000c19d11 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 971
> 22 clang 0x0000000000a9025f clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl) + 847
> 23 clang 0x0000000000a8d2c3 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl) + 445
> 24 clang 0x0000000000a8cbd2 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) + 754
> 25 clang 0x0000000000a932ba clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) + 320
> 26 clang 0x0000000000a8628f
> 27 clang 0x0000000000a8444c
> 28 clang 0x0000000000c40b68 clang::ParseAST(clang::Sema&, bool, bool) + 453
> 29 clang 0x00000000008c4dfc clang::ASTFrontendAction::ExecuteAction() + 298
> 30 clang 0x0000000000a839bc clang::CodeGenAction::ExecuteAction() + 1200
> 31 clang 0x00000000008c4a31 clang::FrontendAction::Execute() + 245
> 32 clang 0x00000000008982ec clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 718
> 33 clang 0x000000000085f3bc clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1011
> 34 clang 0x0000000000847bc1 cc1_main(char const**, char const**, char const*, void*) + 987
> 35 clang 0x0000000000857ee7 main + 555
> 36 libc.so.6 0x00007ffff4ace455 __libc_start_main + 245
> 37 clang 0x0000000000846ca9
> Stack dump:
> 0. Program arguments: /home/rleissa/projects/test/build_debug/Debug+Asserts+Checks/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name simple.cpp -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-linker-version 2.22.0.20120323 -momit-leaf-frame-pointer -resource-dir /home/rleissa/projects/test/build_debug/Debug+Asserts+Checks/bin/../lib/clang/3.2 -fmodule-cache-path /var/tmp/clang-module-cache -internal-isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0 -internal-isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0/x86_64-unknown-linux-gnu -internal-isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0/backward -internal-isystem /usr/local/include -internal-isystem /home/rleissa/projects/test/build_debug/Debug+Asserts+Checks/bin/../lib/clang/3.2/include -internal-e!
> xternc-isystem /include -internal-externc-isystem /usr/include -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /home/rleissa/projects/test/libtest -ferror-limit 19 -fmessage-length 274 -mstackrealign -fgnu-runtime -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-fragile-abi -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/simple-QlxJIj.o -x c++ simple.cpp
> 1. <eof> parser at end of file
> 2. simple.cpp:22:14: LLVM IR generation of declaration 'test'
> 3. simple.cpp:22:14: Generating code for declaration 'test'
> 4. simple.cpp:22:53: LLVM IR generation of compound statement ('{}')
> clang: error: unable to execute command: Aborted
> clang: error: clang frontend command failed due to signal (use -v to see invocation)
> clang: note: diagnostic msg: Please submit a bug report to http://llvm.org/bugs/ and include command line arguments and all diagnostic information.
> clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
> clang: note: diagnostic msg: /tmp/simple-Rkocwp.ii
> clang: note: diagnostic msg: /tmp/simple-Rkocwp.sh
> [Inferior 1 (process 8392) exited with code 0376]
>
>
> As you can see the line is question is executed but the breakpoint is not triggered. Apparently, clang executes the code generation in a different process. What do I have to do in order to debug this process?
>
> --
> Roland
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list