[lldb-dev] [Bug 44649] New: const char * summary providers don't respect the bounds of char[] arrays
via lldb-dev
lldb-dev at lists.llvm.org
Fri Jan 24 03:01:00 PST 2020
https://bugs.llvm.org/show_bug.cgi?id=44649
Bug ID: 44649
Summary: const char * summary providers don't respect the
bounds of char[] arrays
Product: lldb
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: All Bugs
Assignee: lldb-dev at lists.llvm.org
Reporter: labath at google.com
CC: jdevlieghere at apple.com, llvm-bugs at lists.llvm.org
If I have a char[3] variable, it seems reasonable to have the summary provider
stop at the third character even if it did not encounter a nul character.
This is what gdb does. Lldb currently does not do that:
$ cat /tmp/a.cc
struct A {
char arr[3];
char a, b, c;
} a;
int main() {
a.arr[0] = 'a';
a.arr[1] = 'r';
a.arr[2] = 'r';
a.a = 0x42;
a.b = 0x47;
a.c = 0x42;
return 0;
}
$ bin/clang /tmp/a.cc -g -o /tmp/a.out
$ bin/lldb /tmp/a.out
(lldb) target create "/tmp/a.out"
Current executable set to '/tmp/a.out' (x86_64).
(lldb) target stop-hook add -o "v a"
Stop hook #1 added.
(lldb) b main
Breakpoint 1: where = a.out`main + 13 at a.cc:7:12, address =
0x000000000040112d
(lldb) r
Process 15123 launched: '/tmp/a.out' (x86_64)
(A) ::a = (arr = "", a = '\0', b = '\0', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x000000000040112d a.out`main at a.cc:7:12
4 } a;
5
6 int main() {
-> 7 a.arr[0] = 'a';
8 a.arr[1] = 'r';
9 a.arr[2] = 'r';
10 a.a = 0x42;
(lldb) n
(A) ::a = (arr = "a", a = '\0', b = '\0', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x0000000000401135 a.out`main at a.cc:8:12
5
6 int main() {
7 a.arr[0] = 'a';
-> 8 a.arr[1] = 'r';
9 a.arr[2] = 'r';
10 a.a = 0x42;
11 a.b = 0x47;
(lldb)
(A) ::a = (arr = "ar", a = '\0', b = '\0', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x000000000040113d a.out`main at a.cc:9:12
6 int main() {
7 a.arr[0] = 'a';
8 a.arr[1] = 'r';
-> 9 a.arr[2] = 'r';
10 a.a = 0x42;
11 a.b = 0x47;
12 a.c = 0x42;
(lldb)
(A) ::a = (arr = "arr", a = '\0', b = '\0', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x0000000000401145 a.out`main at a.cc:10:7
7 a.arr[0] = 'a';
8 a.arr[1] = 'r';
9 a.arr[2] = 'r';
-> 10 a.a = 0x42;
11 a.b = 0x47;
12 a.c = 0x42;
13 return 0;
(lldb)
(A) ::a = (arr = "arrB", a = 'B', b = '\0', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x000000000040114d a.out`main at a.cc:11:7
8 a.arr[1] = 'r';
9 a.arr[2] = 'r';
10 a.a = 0x42;
-> 11 a.b = 0x47;
12 a.c = 0x42;
13 return 0;
14 }
(lldb)
(A) ::a = (arr = "arrBG", a = 'B', b = 'G', c = '\0')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x0000000000401155 a.out`main at a.cc:12:7
9 a.arr[2] = 'r';
10 a.a = 0x42;
11 a.b = 0x47;
-> 12 a.c = 0x42;
13 return 0;
14 }
(lldb)
(A) ::a = (arr = "arrBGB", a = 'B', b = 'G', c = 'B')
Process 15123 stopped
* thread #1, name = 'a.out', stop reason = step over
frame #0: 0x000000000040115d a.out`main at a.cc:13:3
10 a.a = 0x42;
11 a.b = 0x47;
12 a.c = 0x42;
-> 13 return 0;
14 }
--
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/20200124/312ae6aa/attachment.html>
More information about the lldb-dev
mailing list