我正在尝试调试一个用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/
我正在尝试从控制台开始调试我的应用程序。>gdb./Geod然后在gdb中(gdb)run我得到了输出:errorwhileloadingsharedlibraries:libGeo.Cored.so.1:cannotopensharedobjectfile:Nosuchfileordirectory系统配置如下:>echo$LD_LIBRARY_PATH/home/paceholder/projects/geo/lib/debug>ls$LD_LIBRARY_PATHlibGeo.Cored.so.1.0.0libGeo.Cored.solibGeo.Cored.so.1libGeo
我不是专业的C程序员。我在使用GDB调试程序时遇到问题。(我试图修复的错误与我在这里询问的问题无关。)我的问题是当我直接从shell运行二进制文件时程序运行良好,但当我使用GDB运行它时程序崩溃。这里有一些关于该程序的信息可能有用:它是一款已有20多年历史的数据库软件,最初是为Solaris编写的(我认为)但后来移植到Linux,它是setuid(但不是root,感谢上帝)。尝试打开文件进行写入时,程序在GDB中崩溃。使用GDB,我能够确定发生崩溃是因为以下系统调用失败:fd=open(path,O_WRONLY|O_CREAT|O_TRUNC,0644);澄清一下:path是一个锁文
我有正在运行的进程,但它的可执行文件已被删除。如果我尝试附加gdb,我会收到以下错误/home/vivek/binary/releases/20120328101511/bin/app.exe(deleted):Nosuchfileordirectory.如何将gdb附加到此进程?示例测试用例:源代码:#include#includeintmain(){for(;;){printf("Sleeping");sleep(1);}}编译它gccmain.cc-oa.outgccmain.cc-ob.out运行./a.out现在从不同的终端删除a.out。然后启动gdb附加pgrepa.ou
我正在尝试使用GNU汇编器学习ARM汇编器编程。我已经用QEmu设置了我的PC,并且有一个DebianARM-HFchroot环境。如果我汇编并链接我的测试程序:.text.global_start_start:movr0,#6bxlr与:astest.s-otest.oldtest.o-otest然后将文件载入gdb并在_start上设置断点:root@Latitude-E6420:/root#gdbtestGNUgdb(GDB)7.6.1(Debian7.6.1-1)Copyright(C)2013FreeSoftwareFoundation,Inc.LicenseGPLv3+:G