我有一个C应用程序,该应用程序被编译为可在redhat linux体系结构上运行,该程序在正常执行期间运行良好。但是,一旦我开始尝试使用GDB调试它,它就会崩溃:Child terminated with signal = 0xb (SIGSEGV).
问题是这里有一些警告-它是linux应用程序,但是我正在使用Windows计算机上的gdbserver进行远程调试。我遵循了本文中的步骤:https://www.linux.com/news/remote-cross-target-debugging-gdb-and-gdbserver,该步骤基本上表明我需要编译将在Windows上运行但可以调试Linux应用程序的GDB的跨平台版本。我已经做到了。该应用程序正在本地计算机上的docker容器中运行,此时,我已在该容器上运行gdbserver。我已经创建了跨平台的GDB可执行文件,并且正在运行它,并连接到Docker容器上的gdbserver。
它可以附加断点,这意味着可以找到合适的符号,但是一旦应用程序开始执行任何操作,它就会因段错误而崩溃。
这里的事情是我知道它与GDB可执行文件的跨平台性有某种联系。如果我从Windows子系统(用于Linux)运行常规GDB并使用该数据库连接到gdbserver,它就可以正常工作,但是跨平台编译的GDB会导致段错误。那么,有没有人对我可能对此有任何线索?
这样做的全部目的是能够使用IDE(最好是VSCode)进行调试,这就是为什么我需要使用跨平台GDB可执行文件,而不能仅使用Windows Subsystem for Linux GDB的原因。
任何帮助将不胜感激。