草庐IT

runtime-gdb

全部标签

c++ - 为什么 GNU binutils 和 GDB 合并为一个包?

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git请特别注意标签部分。这个决定背后的理由是什么?合并是否会影响构建最新binutils和GDB的建议方法?(事实上​​,当我checkoutbinutils-2_25_1并运行makeall&&makeinstall时,我也得到了gdb。) 最佳答案 我做了转换。我将它们加入存储库的原因部分是历史原因,部分是实际原因。从历史上看,gdb和binutils几乎一直在一起。当它们在Cygnus中维护时,它们位于单个源代码树(称为

linux - gdb 似乎忽略了可执行功能

我正在调试一个使用libnetfilter_queue的程序。文档指出用户空间队列处理应用程序需要CAP_NET_ADMIN功能才能运行。我已使用setcap实用程序完成此操作,如下所示:$sudosetcapcap_net_raw,cap_net_admin=eip./a.out我已验证功能已正确应用,因为a)程序正常运行并且b)getcap返回以下输出:$getcap./a.out./a.out=cap_net_admin,cap_net_raw+eip但是,当我尝试从命令行使用gdb(例如$gdb./a.out)调试该程序时,由于没有正确的权限集。gdb的调试功能在其他情况下完美

java - 如何告诉 Java 运行这个 Runtime.getRuntime().exec,而不用等待它必须运行的任何命令,只需在后端运行它?

如何让Runtime.getRuntime().exec(p)运行而不等待sleep10?目前它是错误的,它等待直到exec完成然后移动到下一个。在我需要运行的地方让exec运行,以便在10秒后它可以杀死PresentationInProjector.jpg。Example:Runtime.getRuntime().exec("(sleep10;echo'09|00|CC|01|83|88'|nclocalhost58888)&");PlayThisSlideShow("PresentationInProjector.jpg"); 最佳答案

linux - 如何使用 GDB 分析故障转储文件

我有一个在CentOS下运行的服务器应用程序。服务器每秒响应许多请求,但每隔一小时左右就会反复崩溃并创建一个故障转储文件。情况真的很糟糕,我需要尽快找出坠机原因。我怀疑问题是并发问题,但我不确定。我可以访问源代码和故障转储文件,但我不知道如何使用故障转储来查明问题。非常感谢任何建议。 最佳答案 首先要查找的是程序崩溃时收到的错误消息。这通常会告诉您发生了什么样的错误。例如“segmentationfault”或“SIGSEGV”几乎肯定意味着您的程序已经取消引用NULL或其他无效指针。如果程序是用C++编写的,那么错误消息通常会告诉

linux - GDB 警告 : Loadable section not found in added symbol-file system-supplied DSO at 0x7ffff7ffd000

abijithbufferOverFlow$gdba.outGNUgdb(GDB)7.6Copyright(C)2013FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"and"showwarranty"fordetails.ThisGDBwasconfiguredas"x86_64-

c - GDB 检查内存权限

我在内存中有一个地址,我想找出该内存地址的权限(r/w/x)。例如char*s="hello";这里,字符串文字“hello”存储在只读内存中。通过gdb运行程序时,是否可以检查该内存地址的权限(是否只允许读取等)? 最佳答案 你可以先找到s指向的地方:(gdb)prints$6=0x400dbc"foo"然后找到它所在的部分:(gdb)maintenanceinfosectionsExecfile:`/home/mfukar/tmp',filetypeelf64-x86-64....sections...0x00400db8->0

linux - gdb/ddd 程序收到信号 SIGILL

我在Linux中使用c++编写了一个非常简单的程序,它使用cURL库通过http从某个网站下载图像(基本上开发了一个http客户端请求)。http://curl.haxx.se/libcurl/c/allfuncs.html#defineCURL_STATICLIB#include#include#include#include#includesize_twrite_data(void*ptr,size_tsize,size_tnmemb,FILE*stream){size_twritten=fwrite(ptr,size,nmemb,stream);returnwritten;}in

代码:: block - 警告:GDB:无法设置控制终端:不允许操作

我已经通过官方存储库在Ubuntu14.04中安装了Code::Blocks13.12。当我编译时,一切正常。但是当我调试时,shell中显示以下消息:warning:GDB:Failedtosetcontrollingterminal:Operationnotpermitted程序执行到断点,但当我执行下一行时,什么也没有显示。如何解决这个问题?PD:我已经安装了最新版本的GDB(存储库中的那个)。我还尝试使用linux终端而不是Codeblocks显示的终端。 最佳答案 我认为这只是意味着code::blocks正在“CLI”模

linux - 使用 gdb/gdbserver 跳过库调用

我有一个一般的gdb/gdbserver问题。我正在尝试在主机上使用gdb并在远程目标上使用gdbserver来调试armlinux嵌入式应用程序。我可以单步执行main开头的代码行。但是,gdb(或gdbserver)似乎在调用共享库函数后丢失了。即使我在调用后设置断点并继续使用,它也永远不会到达断点。我知道我在共享库中没有符号,而且真的不想进入它们。即使符号不在共享库中或至少继续到下一个断点,我是否应该能够成功地跨过gdb中的库调用?或者这是否表明存在不同类型的问题? 最佳答案 按地址断点,而不是按符号,有时更可靠。试试这个:(

linux - 如何在 Linux 上获取 gdb 以查找在 Windows 上编译的二进制交叉编译的源文件

我正在尝试调试在Windows主机上针对Linux目标交叉编译的应用程序。问题:由于初始编译是在Windows中进行的,因此二进制文件中存储的源文件路径的格式为C:\Users\foo\project\...。在Linux目标上,我将源文件放在\home\foo\project\....默认情况下,由于路径不同,gdb找不到源文件。到目前为止我尝试了什么:在gdb中使用“directory”命令为正在调试应用程序的目标Linux系统中的.c源文件提供准确路径。这可行,但不幸的是,实际上有数百个文件,因此该解决方案不切实际。使用setsubstitute-pathC:\\Users\\f