[lldb-dev] [Bug 19974] New: C: lldb cant find file:line in "included" code (set breakpoint / source list)

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sat Jun 7 10:53:49 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=19974

            Bug ID: 19974
           Summary: C: lldb cant find file:line in "included" code (set
                    breakpoint / source list)
           Product: lldb
           Version: unspecified
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: lldb-dev at cs.uiuc.edu
          Reporter: sford at geeky-boy.com
    Classification: Unclassified

Searched bugzilla, couldn't find.  Might be a bug in clang or llvm, but the
symptom is in lldb, so I'm putting it here.  Tool versions listed below. 

If I have a C module include additional C code using #include, I can't set
breakpoints or list source by file / line.  I can use file / line for the main
.c file which does the including, and other separately-compiled modules, but
not in the included file.


REPRODUCTION

file x.c:
1  #include <stdio.h>
2  void x1();
3  int main(int argc, char **argv)
4  {
5    printf("main starts\n");
6    x1();
7    printf("main exiting\n");
8    return 0;
9  }
10 #include "x1.c"

file x1.c:
1  void x1()
2  {
3    printf("in x1\n");
4  }


Build line:
1  $ clang -g -o x x.c
2  $ clang -v
3  Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
4  Target: x86_64-apple-darwin13.2.0
5  Thread model: posix


Debug session:
1  lldb ./x
2  Current executable set to './x' (x86_64).
3  (lldb) v
4  lldb-310.2.37

5  (lldb) b x1.c:3
6  Breakpoint 1: no locations (pending).
7  WARNING:  Unable to resolve breakpoint to any actual locations.

8  (lldb) b x.c:6
9  Breakpoint 2: where = x`main + 32 at x.c:6, address = 0x0000000100000f00

10 (lldb) source list -f x.c -l 3
11   3       int main(int argc, char **argv)
12   4       {
13   5           printf("main starting\n");
14   6           x1();
15   7           printf("main exiting\n");
16   8       }
17   9       #include "x1.c"

18 (lldb) source list -f x1.c -l 1
19 error: Could not find source file "x1.c".

I also tried the full breakpoint set command with long options with no
difference.  I also tried using x.c with line numbers above 10, thinking it
might attribute the x1.c lines as additional lines in x.c.  No help.

However, I am able to set a breakpoint on the x1() function:
21 (lldb) breakpoint set -name x1
22 Breakpoint 3: where = x`x1 + 15 at x1.c:3, address = 0x0000000100000f3f
Interesting that it is able to *report* the location as "x1.c:3", but you can't
break on that specification.

Also, if I remove x.c line 10 (#include "x1.c"), add stdio.h to x1.c, compile
them separately and link them, it works OK.

P.S. - in case anybody is curious why I would include C code like that, x1.c is
unit test code that wants to do white-box testing and therefore wants access to
structure fields and static functions not available to separately-compiled
modules.  Yes, there are other ways to do it; this is the way I do it.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20140607/9352e979/attachment.html>


More information about the lldb-dev mailing list