-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[LLDB] Process minidump better error messages #149206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
e5edc85
74a07f2
3ff5c27
95ef690
ffc83c9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| # Check that looking up a memory region not present in the Minidump fails | ||
| # even if it's in the /proc/<pid>/maps file. | ||
|
|
||
| # RUN: yaml2obj %s -o %t | ||
| # RUN: %lldb -c %t -o "memory read 0x5000" 2>&1 | FileCheck %s | ||
|
|
||
| # CHECK-LABEL: (lldb) memory read 0x5000 | ||
| # CHECK-NEXT: error: No memory range found for address (0x5000) | ||
|
|
||
| --- !minidump | ||
| Streams: | ||
| - Type: SystemInfo | ||
| Processor Arch: AMD64 | ||
| Processor Level: 6 | ||
| Processor Revision: 15876 | ||
| Number of Processors: 40 | ||
| Platform ID: Linux | ||
| CSD Version: 'Linux 3.13.0-91-generic #138-Ubuntu SMP Fri Jun 24 17:00:34 UTC 2016 x86_64' | ||
| CPU: | ||
| Vendor ID: GenuineIntel | ||
| Version Info: 0x00000000 | ||
| Feature Info: 0x00000000 | ||
| - Type: LinuxProcStatus | ||
| Text: | | ||
| Name: test-yaml | ||
| Umask: 0002 | ||
| State: t (tracing stop) | ||
| Pid: 8567 | ||
| - Type: LinuxMaps | ||
| Text: | | ||
| 0x1000-0x1100 r-xp 00000000 00:00 0 | ||
| 0x2000-0x2200 rw-p 00000000 00:00 0 | ||
| 0x4000-0x6000 rw-- 00000000 00:00 0 | ||
| - Type: Memory64List | ||
| Memory Ranges: | ||
| - Start of Memory Range: 0x1000 | ||
| Data Size: 0x100 | ||
| Content : '' | ||
| - Start of Memory Range: 0x2000 | ||
| Data Size: 0x200 | ||
| Content : '' | ||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -308,16 +308,19 @@ TEST_F(MinidumpParserTest, GetMemory) { | |
| )"), | ||
| llvm::Succeeded()); | ||
|
|
||
| EXPECT_EQ((llvm::ArrayRef<uint8_t>{0x54}), parser->GetMemory(0x401d46, 1)); | ||
| EXPECT_EQ((llvm::ArrayRef<uint8_t>{0x54, 0x21}), | ||
| parser->GetMemory(0x401d46, 4)); | ||
|
|
||
| EXPECT_EQ((llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04, 0xbc, 0xe9}), | ||
| parser->GetMemory(0x7ffceb34a000, 5)); | ||
| EXPECT_EQ((llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04}), | ||
| parser->GetMemory(0x7ffceb34a000, 3)); | ||
|
|
||
| EXPECT_EQ(llvm::ArrayRef<uint8_t>(), parser->GetMemory(0x500000, 512)); | ||
| EXPECT_THAT_EXPECTED(parser->GetMemory(0x401d46, 1), | ||
| llvm::HasValue(llvm::ArrayRef<uint8_t>{0x54})); | ||
| EXPECT_THAT_EXPECTED(parser->GetMemory(0x401d46, 4), | ||
| llvm::HasValue(llvm::ArrayRef<uint8_t>{0x54, 0x21})); | ||
| EXPECT_THAT_EXPECTED( | ||
| parser->GetMemory(0x7ffceb34a000, 5), | ||
| llvm::HasValue(llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04, 0xbc, 0xe9})); | ||
| EXPECT_THAT_EXPECTED( | ||
| parser->GetMemory(0x7ffceb34a000, 3), | ||
| llvm::HasValue(llvm::ArrayRef<uint8_t>{0xc8, 0x4d, 0x04})); | ||
| EXPECT_THAT_EXPECTED( | ||
| parser->GetMemory(0x500000, 512), | ||
| llvm::FailedWithMessage("No memory range found for address (0x500000)")); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: maybe we can also add a test for the "Address xxx is not in range xxx" error case?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure how plausible this'll be. That's mostly a safety check. Ideally we'll never return an entry unless it's in the range. (Not sure if we even need the check anymore) |
||
| } | ||
|
|
||
| TEST_F(MinidumpParserTest, FindMemoryRangeWithFullMemoryMinidump) { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we use
LLDB_LOG_ERRORhere? Same question below.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I personally don't have a lot of context on if this should be an error (WOW even when I was at MSFT wasn't a common talking point). But I'm going to make the change