mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
ac637ec30d
I sometimes encountered a weird breakpoint failure when using start: (gdb) start Temporary breakpoint 2 at 0x40162d: file gdb-25911.c, line 4. Starting program: C:\src\tests\gdb-25911.exe Warning: Cannot insert breakpoint 2. Cannot access memory at address 0x401628 After trying a lot of combinations, I found a way to reproduce it: (gdb) file gdb-25987.exe Reading symbols from gdb-25987.exe... (gdb) start Temporary breakpoint 1 at 0x401638: file gdb-25987.cpp, line 13. Starting program: C:\src\tests\gdb-25987.exe Temporary breakpoint 1, main () at gdb-25987.cpp:13 13 int main() { (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. MyClass::call (this=0x3d20d0) at gdb-25987.cpp:8 8 *(char*)(nullptr) = 1; (gdb) kill Kill the program being debugged? (y or n) y [Inferior 1 (process 1140) killed] (gdb) file gdb-25911.exe Load new symbol table from "gdb-25911.exe"? (y or n) y Reading symbols from gdb-25911.exe... (gdb) start Temporary breakpoint 2 at 0x40162d: file gdb-25911.c, line 4. Starting program: C:\src\tests\gdb-25911.exe Warning: Cannot insert breakpoint 2. Cannot access memory at address 0x401628 Command aborted. The actual failure was that ReadProcessMemory used a process handle that was no longer valid. And the underlying reason was that the windows_thread_info destructor closes a thread handle that was provided earlier by WaitForDebugEvent. But since this is not allowed (and it was actually already closed at this point, and the handle value reused), this closed another still-needed handle. gdb/ChangeLog: 2020-05-27 Hannes Domani <ssbssa@yahoo.de> * nat/windows-nat.c (windows_thread_info::~windows_thread_info): Don't close thread handle. |
||
---|---|---|
.. | ||
aarch64-linux-hw-point.c | ||
aarch64-linux-hw-point.h | ||
aarch64-linux.c | ||
aarch64-linux.h | ||
aarch64-sve-linux-ptrace.c | ||
aarch64-sve-linux-ptrace.h | ||
aarch64-sve-linux-sigcontext.h | ||
amd64-linux-siginfo.c | ||
amd64-linux-siginfo.h | ||
fork-inferior.c | ||
fork-inferior.h | ||
gdb_ptrace.h | ||
gdb_thread_db.h | ||
glibc_thread_db.h | ||
linux-btrace.c | ||
linux-btrace.h | ||
linux-namespaces.c | ||
linux-namespaces.h | ||
linux-nat.h | ||
linux-osdata.c | ||
linux-osdata.h | ||
linux-personality.c | ||
linux-personality.h | ||
linux-procfs.c | ||
linux-procfs.h | ||
linux-ptrace.c | ||
linux-ptrace.h | ||
linux-waitpid.c | ||
linux-waitpid.h | ||
mips-linux-watch.c | ||
mips-linux-watch.h | ||
ppc-linux.c | ||
ppc-linux.h | ||
riscv-linux-tdesc.c | ||
riscv-linux-tdesc.h | ||
windows-nat.c | ||
windows-nat.h | ||
x86-cpuid.h | ||
x86-dregs.c | ||
x86-dregs.h | ||
x86-gcc-cpuid.h | ||
x86-linux-dregs.c | ||
x86-linux-dregs.h | ||
x86-linux.c | ||
x86-linux.h |