我在gdb (7.1版)中收到以下消息:
[Thread debugging using libthread_db enabled]
和命令reverse-step
结果显示以下错误消息:
(gdb) reverse-step
Target multi-thread does not support this command
我现在正在调试一个串行代码,所以我绝对不需要多线程。我是否可以以某种方式将其关闭,以便获得最新的反向调试命令?此外,如果代码与OpenMPI并行化,则根本不需要多线程调试,对吧?
Edit:是否设置为编译标志,可以直接排除?
我想调试一个运行多个TCP服务器线程的C程序。我不能设置一个复杂的调试工具,因为我必须在嵌入式linux(忙碌的盒子)中进行调试。我希望它能原生支持gdb。
所以我从gdb开始。一旦我输入run,服务器似乎在后台运行,但gdb返回提示和"Program received signal SIG64 (Real-time event 64)“消息(我猜与pthread有关)。我知道这一定是因为main被分成了几个线程。但是我不知道如何调试它。任何起点都会很有帮助。
另外,有没有其他的“跟踪”,比如调试器,我可以使用很小的内存?
请帮帮忙
我有网页守护程序和请求,使它失败与SIGSEGV。因此,我启动守护进程,使用gdb附加,继续,发送请求,并获得以下内容:
$ gdb attach -p 630066
(gdb) c
Continuing.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb)
如何在杀死应用程序之前使gdb打印堆栈跟踪?应用程序没有子进程,只有线程。
谢谢。
我正在处理多线程应用程序,当进程转储时,它总是生成核心,如下所示,我无法理解它实际上是在哪里转储。
GNU gdb Red Hat Linux (6.5-25.el5rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type
我对GDB并不熟悉,也不确定你们中是否有人经历过:当我使用GDB来调试一个有两个线程的程序时,我发现逐行执行的步进不是线性的,甚至对于一个线程来说也是不可预测的,输出的变量值也是令人困惑的。假设我有一个程序(在C++中),如下所示:
(我正在使用gdb的-tui模式在ubuntu命令行上调试)。
.....
70 for (int i = 0; i < MAX; i++) {
71 int foo = 1;
b+ 72 Bar *bar = f1();
73 int v1 = bar->doCalc();
74 in
我有一个带有成员变量pthread_mutex_t m的基类B()。当我试图从派生类锁定互斥锁时,我将永远阻止。我打开GDB,打印出m的样子,看起来像是胡言乱语(未实例化),但我不确定。
基类
class B
{
protected: //or public!
pthread_mutex_t m;
public:
virtual void lock(); //wrapper for pthread_mutex_lock(&m)
virtual void unlock(); //wrapper
};
派生类
class D
我使用多线程HTTP服务器的Boost asio 编写了一个小应用程序。如果我按下ctrl-c键,我就会定期收到一个seg错误。我知道我一定是覆盖了某个地方的内存,但不太确定如何调试它。GDB中的堆栈跟踪没有任何帮助。在我点击dtor之前,有没有一些工具可以帮助我检测到腐败?(对不起,我基本上是个Java人)
谢谢。在Debian Linux上使用Boost 1.38
PS这里是堆栈跟踪
Program terminated with signal 11, Segmentation fault.
#0 0xb7f74389 in tls_destructor (data=0xb5200fc8
我最近下载了MI库,并执行/阅读了一些示例代码。在我看到的所有示例中,实现都是通过一个单独的程序实现的,如下所示:
Main Program
Interact with GDB
exec another program
Gather Debug info of the another program
我的问题是,我们如何在当前线程/程序本身中调用/实现GDB,即附加这个自执行进程。
我的生产服务器上的Apache正在断断续续地故障。我在apache配置中启用了核心转储选项,并有几个转储核心文件。不幸的是,由于它是生产服务器,apache或加载的模块没有使用调试符号进行编译。据我所知,gdb没有调试符号就不能做很多事情。
我能否至少找出哪个模块导致seg故障,而不需要调试符号?如果是这样的话,是怎么做的?
更新下面是gdb回溯跟踪的输出
(gdb) bt full
#0 0xb7f1f832 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
No symbol table info available.
#1 0xb7be8
我正在从Centos移植到Cygwin,发现我的应用程序在Botan::InitializationVector构造函数执行过程中没有错误消息,并且退出状态为零。
如果我试图在main()中主动附加gdb,其中它正在等待自旋变量,则不会得到正常的堆栈跟踪:
(gdb) where
#0 0x7c90120f in ntdll!DbgUiConnectToDbg ()
from /cygdrive/c/WINDOWS/system32/ntdll.dll
#1 0x7c952119 in ntdll!KiIntSystemCall ()
from /cygdrive/c/WIND
我正在使用gdb来调试程序。我看到的有点奇怪:
(gdb) bt
0xb59656f8 in globalCallStubClass::addCallContext (**this=0x0**)
at /ccase_enodeb/callp/build_callp/src/test/framework/shared/src/shared_call_context.cc:1962
0xb5b52e64 in rrcStubClass::process_scenario_spontaneous_trigger_RRC_CONNECTION_REQUEST (gcppMsgCtx=...
我正在linux机器上使用epoll编写一个网络程序,我从gdb获得了错误消息。
Program received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7ffff609a700 (LWP 19788)]
0x00007ffff7bcdb2d in write () from /lib/libpthread.so.0
(gdb)
(gdb) backtrace
#0 0x00007ffff7bcdb2d in write () from /lib/libpthread.so.0
#1 0x0000000000416bc8 i
我正在Linux上调试静态多线程x86-64 C++应用程序。
我可以在函数上设置断点并在其上停止,我可以一步一步地遍历函数体。但是当我尝试单步执行另一个函数时,gdb并没有在它的开始处停止,它似乎只是继续执行。当我中断程序执行时,gdb进入中断状态,并且变得不可用:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
作为一种变通办法,我可以多次使用stepi而不是step,stepi的工作方式与预期