C++ 如何解决Linux上的线程问题?
我正在尝试调试Linux上的应用程序的一个问题。它倾向于在C++ 如何解决Linux上的线程问题?,c++,linux,debugging,pthreads,C++,Linux,Debugging,Pthreads,我正在尝试调试Linux上的应用程序的一个问题。它倾向于在libstdc++.so或libstdc.so的随机位置与SIGSEGV崩溃 似乎在任何地方都没有明显的竞争条件,因为我添加的线程中的工作是非常孤立的。但它几乎一直在崩溃 该应用程序是用g++-c-pthread-D_可重入,并链接到g++-pthread-o… 但它仍然几乎一直在一个libstdc*.so函数中崩溃。我已经浪费了几天时间试图找出问题出在哪里,但是没有办法 有人有什么建议吗?有没有办法确保libstdc*.so被编译为线程
libstdc++.so
或libstdc.so
的随机位置与SIGSEGV崩溃
似乎在任何地方都没有明显的竞争条件,因为我添加的线程中的工作是非常孤立的。但它几乎一直在崩溃
该应用程序是用g++-c-pthread-D_可重入
,并链接到g++-pthread-o…
但它仍然几乎一直在一个libstdc*.so
函数中崩溃。我已经浪费了几天时间试图找出问题出在哪里,但是没有办法
有人有什么建议吗?有没有办法确保libstdc*.so
被编译为线程感知的?有没有gdb命令可以帮助我?调试堆
我只在Linux上工作了几年,所以我迷路了…您应该做几件事:
- 使用
- 使用
- 使用
编写单元测试。虽然它们对查找线程问题没有多大帮助,但它们可以帮助您查找错误的内存访问问题。在编译时尝试使用
-g
,如果您还没有找到,可以获取符号调试器信息
你有没有被丢弃的核心?如果是这样,您可以使用gdb
根据可执行文件加载内核,如下所示:
gdb <my-exe> <my-core-file>
然后寻找两个相互锁定的线程。你能发布代码的相关部分吗?你想用那罐蠕虫做一些芥末吗?@hmjd:不幸的是,它已经是一个很大的代码库,可以扩展为多线程。我无法为其中的一个子集创建复制场景。因此,我正在寻找能够有所帮助的技术,这就是我所能做的。。。它扩展为多线程-哦,天哪!一般来说,这是一个糟糕的举动。最好将并发性合并到技术设计中,尽管我承认您现在无法控制这一点。祝你好运我将通过
gdb myapp
,然后r
,SIGSEGV
,bt
,信息线程启动该应用程序。我有调用堆栈,但它们在libstdc*中的malloc
s和new
s上失败。因此
sSounds可能是您的运行时库安装出错,也可能是您的构建环境和运行时环境不兼容。您是否从头开始重新构建了所有内容并检查了LD\u LIBRARY\u PATH
或等效项?当然,但是调用malloc
s和new
s的函数是什么?查看调用堆栈,直到看到与软件堆栈相关的函数,而不仅仅是clib中的函数。
gdb <my-exe> <my-process-id>