Multithreading SEGV发生在与主线程不同的线程中时缺少CoreFile 我目前正在调试一个C++应用程序中的Sebug,这给我带来了困难,因为在出现Sebug时没有生成核心文件。
经过一些阅读和检查ulimit等,我可以重现核心文件未生成的情况。它似乎在某种程度上与线程有关。为此,我修改了我们的软件,人工生成SEGV: 现在出现了以下模式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”->不生成核心文件 您知道任何特定于线程的属性可以解
- 生成主线程->核心文件中的SEGV
- 非主线程中的SEGV->未生成核心文件
- 发送“kill-s SIGSEGV
”->生成核心文件
- 发送“kill-s SIGSEGV
”->不生成核心文件
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上看到了这种行为。可能是特定内核中的错误/设置?