在SIGTRAP之后无法在gdb中单步调试程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SIGTRAP之后无法在gdb中单步调试程序相关的知识,希望对你有一定的参考价值。
使用mingw gdb,当我在程序运行时打破程序(使用In GDB on MinGW, how do I make Ctrl-C stop the program?中的方法),gdb无法从那里拿起。
我能得到的唯一回溯信息是
#0 0x00007fffbfccd881 in ntdll!DbgBreakPoint () from /c/WINDOWS/SYSTEM32/ntdll.dll
#1 0x00007fffbfcf99fb in ntdll!DbgUiRemoteBreakin () from /c/WINDOWS/SYSTEM32/ntdll.dll
#2 0x00007fffbd473034 in KERNEL32!BaseThreadInitThunk ()
from /c/WINDOWS/System32/KERNEL32.DLL
#3 0x00007fffbfca1431 in ntdll!RtlUserThreadStart () from /c/WINDOWS/SYSTEM32/ntdll.dll
#4 0x0000000000000000 in ?? ()
如果我试图通过该程序,我得到
Single stepping until exit from function ntdll!DbgUiRemoteBreakin,
which has no line number information.
程序运行完成。我能够正常执行(在断点之后),但我似乎无法让调试器从SIGTRAP中恢复
答案
DebugBreakProcess在目标进程中创建一个新线程,然后通过断点异常向调试器发出信号以暂停执行。
您可以使用info threads
列出所有可用的线程,然后通过thread YOUR_THREAD_NUMBER
切换到另一个线程。
以上是关于在SIGTRAP之后无法在gdb中单步调试程序的主要内容,如果未能解决你的问题,请参考以下文章