Multithreading SEGV发生在与主线程不同的线程中时缺少CoreFile 我目前正在调试一个C++应用程序中的Sebug,这给我带来了困难,因为在出现Sebug时没有生成核心文件。

Multithreading SEGV发生在与主线程不同的线程中时缺少CoreFile 我目前正在调试一个C++应用程序中的Sebug,这给我带来了困难,因为在出现Sebug时没有生成核心文件。,multithreading,segmentation-fault,coredump,core-file,Multithreading,Segmentation Fault,Coredump,Core File,经过一些阅读和检查ulimit等,我可以重现核心文件未生成的情况。它似乎在某种程度上与线程有关。为此,我修改了我们的软件,人工生成SEGV: 现在出现了以下模式 生成主线程->核心文件中的SEGV 非主线程中的SEGV->未生成核心文件 然后为了不改变程序本身,我也尝试了发送信号 发送“kill-s SIGSEGV”->生成核心文件 然后我在und/proc//task中搜索非主线程,并获取id 发送“kill-s SIGSEGV”->不生成核心文件 您知道任何特定于线程的属性可以解

经过一些阅读和检查ulimit等,我可以重现核心文件未生成的情况。它似乎在某种程度上与线程有关。为此,我修改了我们的软件,人工生成SEGV:

现在出现了以下模式

  • 生成主线程->核心文件中的SEGV
  • 非主线程中的SEGV->未生成核心文件
然后为了不改变程序本身,我也尝试了发送信号

  • 发送“kill-s SIGSEGV”->生成核心文件
然后我在und/proc//task中搜索非主线程,并获取id

  • 发送“kill-s SIGSEGV”->不生成核心文件
您知道任何特定于线程的属性可以解释这种行为吗

我也在不同的操作系统下尝试了相同的代码,这只发生在我们的生产环境(redhat6)上,而不是在Ubuntu下。 我仍在试图弄清楚它是否与调试/非调试构建相关

不过,这种行为似乎很奇怪,一定是因为某些微妙之处。 我还想知道,如果我想故意创造这种行为,我甚至不知道为了实现这一点要改变什么

感谢您的帮助

致意
Matthias的价值-它与corepattern有关,我通过一些尝试和错误发现了corepattern

core_pattern  core                   -> corefile
core_pattern  /opt/tmp/core          -> corefile
core_pattern  /opt/tmp/core_%e.%p    -> no corefile
core_pattern  /opt/tmp/core_%e       -> no corefile
core_pattern  /opt/tmp/core_%h       -> corefile
core_pattern  /opt/tmp/core_%h_%p    -> corefile
core_pattern  /opt/tmp/core_%h_%p_%e -> no corefile
因此%e似乎是有时不写入核心的原因。 然后 解释发生的情况-即%e不是可执行文件名,但包含有关线程的信息-在我的示例中包含“/”


这也解释了为什么不同线程中的segv行为不同,也解释了为什么我最简单的程序没有显示问题-因为没有代码给线程命名

这可能会有帮助:@MaximeGroushkin:我阅读了页面,但看不出它有什么帮助。提到线程的唯一一点是corefile的命名(在我的例子中,它不存在)——你能详细说明这有什么帮助吗?如果阅读文档没有帮助,你可能想发布一个。@MaximeGroushkin不幸的是,我还不能发布一个最小的示例,因为我没有创造出这样一个例子来展示这种行为。当主线程或非主线程出现故障时,我编写的每个简单的程序都会生成很好的核心文件。我想问的是更多的信息——主线程和非主线程的区别是什么。这里是@matthias学院。我们在Scientific Linux 6.4上看到了这种行为。可能是特定内核中的错误/设置?