Skip to content

Commit

Permalink
Fix stack trace trimming with LLDB
Browse files Browse the repository at this point in the history
Summary: I must have chosen trimming before frame 8 based on assertion
failures, but that trims too many frame for a general segfault. So this
changes to start printing at frame 4, as in this example where I've
seeded a null deref:

```
Received signal 11 (Segmentation fault)
Invoking LLDB for stack trace...
Process 873208 stopped
* thread facebook#1, name = 'db_stress', stop reason = signal SIGSTOP
    frame #0: 0x00007fb1fe8f1033 libc.so.6`__GI___wait4(pid=873478, stat_loc=0x00007fb1fb114030, options=0, usage=0x0000000000000000) at wait4.c:30:10
  thread facebook#2, name = 'rocksdb:low', stop reason = signal SIGSTOP
    frame #0: 0x00007fb1fe8972a1 libc.so.6`__GI___futex_abstimed_wait_cancelable64 at futex-internal.c:57:12
Executable module set to "/data/users/peterd/rocksdb/db_stress".
Architecture set to: x86_64-unknown-linux-gnu.
True
frame facebook#4: 0x00007fb1fe844540 libc.so.6`__restore_rt at libc_sigaction.c:13
frame facebook#5: 0x0000000000608514 db_stress`rocksdb::StressTest::InitDb(rocksdb::SharedState*) at db_stress_test_base.cc:345:18
frame facebook#6: 0x0000000000585d62 db_stress`rocksdb::RunStressTestImpl(rocksdb::SharedState*) at db_stress_driver.cc:84:17
frame facebook#7: 0x000000000058dd69 db_stress`rocksdb::RunStressTest(shared=0x00006120000001c0) at db_stress_driver.cc:266:34
frame facebook#8: 0x0000000000453b34 db_stress`rocksdb::db_stress_tool(int, char**) at db_stress_tool.cc:370:20
...
```

Test Plan: manual (see above)

Reviewers:

Subscribers:

Tasks:

Tags:
  • Loading branch information
pdillinger committed Nov 27, 2023
1 parent f6fd4b9 commit d8e495c
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions port/stack_trace.cc
Original file line number Diff line number Diff line change
Expand Up @@ -256,9 +256,9 @@ void PrintStack(int first_frames_to_skip) {
if (lldb_stack_trace) {
fprintf(stderr, "Invoking LLDB for stack trace...\n");

// Skip top ~8 frames here in PrintStack
// Skip top ~4 frames here in PrintStack
auto bt_in_lldb =
"script -l python -- for f in lldb.thread.frames[8:]: print(f)";
"script -l python -- for f in lldb.thread.frames[4:]: print(f)";
execlp(/*cmd in PATH*/ "lldb", /*arg0*/ "lldb", "-p", attach_pid_str,
"-b", "-Q", "-o", GetLldbScriptSelectThread(attach_tid), "-o",
bt_in_lldb, (char*)nullptr);
Expand Down

0 comments on commit d8e495c

Please sign in to comment.