我正在使用Eclipse开发和远程调试ARM处理器的某些软件。不幸的是,我写的软件是多线程的,我无法调试它。如果我在线程代码中放置一个断点,我会收到以下消息:
Child terminated with signal = 5
Child terminated with signal = 0x5
GDBserver exiting
在做了相当多的谷歌搜索之后,我找到了一个建议使用它的“解决方案”:
strip --strip-debug libpthread.so.0
不幸的是,我仍然收到了终止错误。
我非常感谢你帮助我解决这个问题!
谢谢!
答案 0 :(得分:1)
首先,这个(以及随后的)错误:
cc1.exe: error: unrecognized command line option "-fstrip-debug"
是通过向GCC命令行添加strip --strip-debug
等引起的。这显然是虚假的事情,而不是你的谷歌搜索建议。 (您可能希望清理问题以删除对这些错误的引用;它们与您的问题无关。)
做了(或应该有)建议的内容,使用strip --strip-debug libpthread.so.0
代替使用strip libpthread.so.0
。
这是因为如果你的libpthread.so.0被完全剥离,GDB就无法使用线程。
它可以被剥离调试符号(这是strip --strip-debug libpthread.so.0
所做的),但剥离所有符号(这是strip libpthread.so.0
所做的)是一个坏主意(TM)。
由于您(显然)不是自己构建libpthread.so.0
,因此您也不需要删除它。
以下命令不应报告no symbols
,并且实际上应打印匹配的nptl_version
(作为已定义的符号):
nm /path/to/target/libpthread.so.0 | grep nptl_version
假设到目前为止一切都很好,我们现在可以诊断您的问题,除了...您没有提供足够的信息;-(特别是,当您运行GDB时,它应该打印类似using /path/to/libthread_db.so.0
的内容。您可能必须在Eclipse中搜索GDB控制台,或者您可能希望从命令行运行GDB,因此您可以准确地看到它打印的内容。
libthread_db.so.0
(对于主机)的版本与lipthread.so.0
(对于目标)的版本匹配至关重要。它们都应该由您的工具链供应商提供。
您的问题很可能是GDB根本找不到libthread_db.so.0
,或者找不到错误。