当切换到子线程时,gdb抱怨“没有可用的源”

时间:2018-09-17 08:39:28

标签: c++ multithreading gdb

我在同一文件中有父线程和子线程。遵循主线程时,gdb没有问题:它可以使用“ layout src”命令正确显示源代码,并使用“ disp val”命令正确显示变量值。但是,一旦我切换到其他线程(使用命令“线程5”),“布局”将无法显示源代码,并显示“无可用源”,而“ disp var”则显示“当前上下文中没有符号var”。 / p>

  • 子线程未释放
  • 父线程通过“ pthread_join”函数等待子线程终止
  • 我正在使用c ++ 11和cuda 9.2

编辑:

我怀疑我没有使用正确的“ libthread_db”文件。但是,我不知道什么是“ libthread_db”,也不知道选择的是什么。如果您认为这可能是问题的根源,那么可以建议一些兼容的libthread_db文件吗?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

“布局”无法显示源代码,并显示“没有可用的源代码”,而“显示变量”则显示“当前上下文中没有符号变量”。

这可能意味着:

  1. 在某些libclibpthread函数中,线程(线程之间没有父/子关系)被阻塞,并且
  2. 您没有安装GLIBC的debuginfo。

尝试从线程被阻塞的任何地方开始up,一旦您处于应用程序级别,就应该重新获得源代码。