在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中单步调试程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在QEMU上的GDB中单步ARM组装?

GDB调试指南-单步调试

GDB 调试多线程程序的总结

如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?

从路径获取 UIImage 仅在调试器中单步执行时有效

fork之后调试子进程(跟随fork-mode子配置)