> > 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.
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-externc-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