如何在RT Linux上使用GDB进行调试:使用SIGTRAP失败

问题描述 投票:0回答:1

我正在尝试在RT Linux上调试多线程应用程序。在常规Linux上,应用程序运行正常,GDB也运行良好。在RT Linux上,应用程序运行正常,但在GDB下,应用程序运行几秒钟然后终止并打印:

Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.

我无法进行回溯,或确定导致问题的原因。我怀疑它可能是gdb使用的一些库,或者应用程序中可能存在内存损坏。

我创建了超过60个线程,还有更多的线程由各种监视器和定时器创建。到目前为止我尝试过的:

  1. 检查libpthread.so.0和libthread_db.so.1之间是否不匹配。我用了 objdump -s --section .comment /usr/lib64/libthread_db-1.0.so

在这两个库上,他们都提供了相同版本的gcc,这与我用于构建应用程序的gcc相同

gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

  1. 尝试在gdb中为SIGTRAP设置一个catchpoint catch signal SIGTRAP commands p $_siginfo.si_code end

这根本不会改变gdb的行为。有任何想法吗?我应该下载的新内核库或源代码?

版本:我的原始linux是从CERN repo下载的Scientific Linux 7(基于CentOS 7)。我还从那里下载并安装了预构建的RT内核。

# gdb --version GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7

# uname -r 3.10.0-957.10.1.rt56.921.el7.x86_64

gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

一些进展有几次gdb本身崩溃并留下了一个gdb核心转储。使用核心文件回溯到gdb,我找到了相同的调用堆栈 - 最后几个函数如下所示:

(gdb) bt
#0  0x00007fc62ca9e207 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:55
#1  0x00007fc62ca9f8f8 in __GI_abort () at abort.c:90
#2  0x000000000069f5e6 in dump_core ()
#3  0x00000000006a1de5 in internal_vproblem ()
#4  0x00000000006a1e59 in internal_verror ()
#5  0x00000000006a1eff in internal_error ()
#6  0x00000000004d5149 in check_ptrace_stopped_lwp_gone ()
#7  0x00000000004d51e2 in linux_resume_one_lwp ()
#8  0x00000000004d6e44 in linux_handle_extended_wait ()
#9  0x00000000004d9cf9 in linux_nat_wait ()
#10 0x00000000004e1273 in thread_db_wait ()
#11 0x0000000000607602 in target_wait ()
#12 0x00000000005cf815 in wait_for_inferior ()

这似乎表明gdb存在问题,所以我使用最新的源代码(8.2.1)重建了gdb,这就停止了gdb崩溃。现在GDB使用SIGSTOP在许多内核调用(sleep,semwait等)停止,我可以按下continue,但这会使调试变得不切实际。

如果我将以下行添加到.gdbinit handle SIGSTOP nostop noprint pass,那么gdb不会在内核调用时停止,但现在断点不起作用,并且很难停止gdb或正在调试的进程。

linux multithreading gdb real-time
1个回答
1
投票

GDB服务器应用程序是为这项工作而制作的。安装在R / T系统上,登录R / T系统并运行GDB服务器应用程序。在本地运行GDB(在您的计算机上),连接到GDB服务器应用程序。我做了很多次,但几年前就已经做过了。建议谷歌搜索细节

如何remote gdb

© www.soinside.com 2019 - 2024. All rights reserved.