Issue 169913
Summary lldb cannot resolve breakpoints freasly written to a file
Labels lldb
Assignees
Reporter samolisov
    I load a simple dictionary application described in [this tutorial](https://lldb.llvm.org/use/tutorials/script-driven-debugging.html) in an LLDB session and set up a breakpoint to the `find_word` function:

````
(lldb) br s -n find_word
```

The breakpoint is set and resolved:

```
(lldb) br list


8: name = 'find_word', locations = 1, resolved = 1, hit count = 0
  8.1: where = dictionary`find_word + 16 at dictionary.c:109:8, address = 0x0000555555555580, resolved, hit count = 0
```

Everything works as it is expected:

```
(lldb) c
Process 2148463 stopped
* thread #1, name = 'dictionary', stop reason = breakpoint 8.1
    frame #0: 0x0000555555555580 dictionary`find_word(dictionary=0x00005555555596b0, word="romeo") at dictionary.c:109:8
   106  /* Given a binary search tree and a word, search for the word
   107     in the binary search tree. */
   108  int find_word(tree_node *dictionary, char *word) {
-> 109    if (!word || !dictionary)
   110      return 0;
```

Then I write the breakpoint 8 into a file:

```
(lldb) br write -f debug 8
```

The breakpoint has been written to the file `debug`, I see this in the file:

```
"BKPTResolver":{"Options":{"NameMask":[56],"Offset":0,"SkipPrologue":true,"SymbolNames":["find_word"]},"Type":"SymbolName"},"
```

Then I stop my lldb session, reload the debugger and restart the application
```
$  lldb dictionary -- romeo.txt
```

read the breakpoints from the `debug` file:

```
(lldb) br read -f debug
```
and get the pending breakpoint:

```
New breakpoints:
Breakpoint 1: no locations (pending).

(lldb) br list
Current breakpoints:
1: name = 'find_word', locations = 0 (pending)
```

I can get the idea when address-based breakpoints with fixed address may be resolved after restart due to address changes, but here I have a symbol-related breakpoint, I didn't recompile and build the binary and I believe the breakpoints should be resolved. Currently, as a workaround, a command-script or python script must be used to set breakpoints and the corresponding commands must be issued every time when the debug session starts.

Even though I attach the debugger to a running process, write breakpoints to a file, delete them and then read the breakpoints from the file, they are reloaded as pending. I didn't touched the application process and therefore no addresses in the executable should be changed.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to