我遇到了段错误。系统日志报告以下内容:segfaultat0ip00000000f71ff256sp00000000f44fee50error4inlibprotobuf-c.so.0.0.0[f71f8000+f000]因此,libprotobuf-c.so被加载到0xf71f8000。当我在gdb中加载相应的核心文件并尝试infosharedlibrary时,它显示FROM地址为0xf71f9f70,这与syslog显示的不同。我无法理解这种不匹配。有人可以帮忙吗?0xf71f9f700xf7204028Yes(*)/usr/lib/libprotobuf-c.so.0
我在fasm及其工作中编写了简单的“hello,world”,但如何为gdb和edb(Evan的调试器)生成调试信息?Fasm编译器只能生成其特定格式的调试符号-“fas”,这当然是gbd无法理解的。 最佳答案 暂时不可能。GDB不理解.fas格式,因此您首先需要将.fas文件转换为DWARF,但不存在这样的转换器。Tomasz有askedforhelp使用格式转换器,所以如果您觉得自己可以胜任这项任务,您应该试一试。 关于linux-如何使用gdb在linux下调试用fasm编写的程序
是否有GDB的GUI允许我调试使用clone()系统调用创建线程的应用程序?我尝试了Insight和KDBG,但由于某种原因,当创建新的克隆线程时,我在线程列表中看不到它。克隆系统调用通过内联汇编调用。是不是因为创建的线程和原来的进程共享PID?(虽然它有一个唯一的TID) 最佳答案 你试过吗:setfollow-fork-modechild我不使用gdbGUI。有时gdb-tui如果我觉得轻浮。 关于linux-GDB使用clone()调试应用程序,我们在StackOverflow上找
我正在使用GDB调试我的C程序,它有点不稳定,可能是因为我没有使用glibc,所以它在中断之前不会检测到新线程。我通过添加一个立即恢复的断点(如果为0则中断)来修复此问题。然而今天我撞墙了。我需要非常快的执行execve()所以正常的fork()是不可能的(会使用大量内存)而且我不能vfork()(我需要一个堆栈来设置管道等)所以我使用与该库(https://code.google.com/p/popen-noshell/)中相同的方法,基本上只使用CLONE_VM进行克隆。这(或者一般调用execve()-我真的不知道)让GDB出于某种原因真的很困惑-基本上它输出这样的东西:[New
我正在尝试调试一个用C++编写的应用程序,该应用程序是为运行Linux的基于ARM的处理器编译的。当应用程序间歇性崩溃时,它会停在某个线程,我认为该线程就是故障所在(分段故障)。我的问题是,我无法识别这个线程是什么。当GDB运行时,我看到在eclipse中打印了以下内容。蓝色下划线的数字是什么?有没有办法让我以编程方式访问它们,以便我知道在代码中查找什么? 最佳答案 除了@HeshanPerera回答。你也可以在你的程序中访问更大的线程idUNIX:#includesyscall(SYS_gettid);WINDOWS:(未测试)#
我正在尝试查看Wireshark的源代码以了解协议(protocol)分析,但是我发现当我只使用gdb./wireshark时,当我按下Ctrl+C并设置一个断点,然后输入C,进程消亡。我想知道libtool做了什么使GDB调试成为可能。我已经读过manlibtool,它说libtool是一个工具,可以很容易地使用各种.a或.o通过一个简单的界面,但我不知道使用libtool使gdbwireshark成为可能的关键是什么。 最佳答案 当您使用libtool构建程序时,它将处理在您的平台中使用共享库的所有困难和特殊性。困难之一是调试,
我们有一个多进程应用程序,其中调试特定的子进程被证明是困难的。由于进程之间的消息传递超时,我们没有时间将gdb附加到目标子进程,所以我想知道我是否可以通过systemtap探测停止进程?我认为应该需要一个简单的探针,例如:probeprocess("exeName").mark("STOP_HERE"){force_sig(SIGSTOP,current);}不幸的是,上面没有编译......有什么想法吗?我不是systemtap专家,所以这可能不是最好的解决方案,但对于任何感兴趣的人来说,这是我的粗略解决方案:#!/bin/stap-gglobalgdbRunning=0;probe
我需要知道二进制文件中是否有调试符号。它是一个生产系统,因此没有像file或objdump或gdb这样的命令。可以在需要时提供更多信息。操作系统:Debian 最佳答案 可能您正在寻找像objdump这样的工具假设我们有这样一个小程序#includeintmain(){printf("Hello");return0;}现在可以正常编译gccexample.c-oexample现在让我们使用objdump工具检查是否存在调试符号objdump-hexample|grepdebug我们当然找不到任何东西现在让我们通过使用调试选项进行编译
我目前正在使用linux使用C++开发分布式软件,该软件同时在20多个节点上执行。因此,我发现的最具挑战性的问题之一是如何调试它。我听说可以在单个gdbsession中管理多个远程session(例如,在主节点中我创建gdbsession,在每个其他节点中我使用gdbserver启动程序),这可能吗?如果可以,你能举个例子吗?您知道其他方法吗?谢谢 最佳答案 你可以尝试这样做:首先在远程主机上使用gdbserver启动节点。如果您使用--multi标志启动它,甚至可以在没有要调试的程序的情况下启动它。当服务器处于多模式时,您可以从本
一直在尝试使用GDB远程调试在我的目标上运行的应用程序。目标基于Armv6,操作系统是linux,应用程序是基于QT的多线程应用程序。我可以设置断点。但是当遇到断点时,程序会随着SIGTRAP一起崩溃。提示:我可以在同一个目标上运行另一个小样本多线程QT-App。可能是什么问题?GDB日志如下0x4ad52c处的断点1:文件,。(2个地点)(gdb)c继续。程序以信号SIGTRAP、跟踪/断点陷阱终止。该程序不再存在。(gdb)(gdb) 最佳答案 你可能有一个解决方案:http://sourceware.org/gdb/wiki/