我有一个错误的程序,当执行时收到一个SIGSEGV。我可以像这样使用gdb:$gdb./prog但我更希望gdb从prog捕获SIGSEGV并自动附加它。$./progSegmentationFault(gdb)...有办法吗?谢谢 最佳答案 嗯。您可以设置信号处理程序以使用当前进程启动调试器。这样您就可以“实时”检查整个状态。#include#include#include#includeconstchar*prog=0;voidfn(intsignum){charbuf[256];snprintf(buf,255,"ddd%s%
我正在尝试调试我用gdb编写的服务器,因为它在非常特殊和罕见的条件下会出现段错误。有什么方法可以让gdb在后台运行(通过安静或批处理模式?),跟随子进程(因为我的服务器是守护进程并与主PID分离)并自动转储核心和回溯(到一个指定的文件)一旦程序崩溃? 最佳答案 假设您有适当的权限,您可以将gdb附加到任何进程。您可以在命令行上执行此操作:gdb/path/to/binary_pid_或在gdb中使用附加命令:attach_pid_因此,一旦您的守护进程启动,您就可以使用这些技术中的任何一种来附加到您的守护进程运行的最终PID。附加g
我正在尝试调试我用gdb编写的服务器,因为它在非常特殊和罕见的条件下会出现段错误。有什么方法可以让gdb在后台运行(通过安静或批处理模式?),跟随子进程(因为我的服务器是守护进程并与主PID分离)并自动转储核心和回溯(到一个指定的文件)一旦程序崩溃? 最佳答案 假设您有适当的权限,您可以将gdb附加到任何进程。您可以在命令行上执行此操作:gdb/path/to/binary_pid_或在gdb中使用附加命令:attach_pid_因此,一旦您的守护进程启动,您就可以使用这些技术中的任何一种来附加到您的守护进程运行的最终PID。附加g
我使用的是Ubuntu12.04LTS。我写了一个简单的程序如下来制造崩溃//null.c#includeintmain(){int*p=NULL;intk=*p;printf("%d",sizeof(0));return0;}现在我用“gcc-gnull.c”运行然后是“./a.out”,输出符合预期。Segmentationfault(coredumped)现在我想使用gdb查看核心转储文件。我做了以下事情我检查了当前目录,没有核心转储文件我尝试用内容“core.%e.%p”更改/proc/sys/kernel/core_pattern。但我无法写入文件。它说“Fsync失败”。我
我使用的是Ubuntu12.04LTS。我写了一个简单的程序如下来制造崩溃//null.c#includeintmain(){int*p=NULL;intk=*p;printf("%d",sizeof(0));return0;}现在我用“gcc-gnull.c”运行然后是“./a.out”,输出符合预期。Segmentationfault(coredumped)现在我想使用gdb查看核心转储文件。我做了以下事情我检查了当前目录,没有核心转储文件我尝试用内容“core.%e.%p”更改/proc/sys/kernel/core_pattern。但我无法写入文件。它说“Fsync失败”。我
gdb介绍gdb只是众多调试器中的一个,但是它是用得最多的,所以有必要了解一下。gdb和gcc一样,都属于gnu开源家族工具链,所以gdb对gcc编译后的程序的调试支持最好。学习一个工具,当然得先去看它官网,了解清楚整个脉络。官网:https://www.sourceware.org/gdb/我们这里关注如何使用,所以进入它的在线文档网站:https://sourceware.org/gdb/current/onlinedocs/gdb/(可能大家通过别的链接进入的网站跟这个不一样,那是因为这个gdb网站服务器里有多个版本的文档仓库,而官网这里进去的,总是最新的版本的文档)还给了个pdf文档:
gdb介绍gdb只是众多调试器中的一个,但是它是用得最多的,所以有必要了解一下。gdb和gcc一样,都属于gnu开源家族工具链,所以gdb对gcc编译后的程序的调试支持最好。学习一个工具,当然得先去看它官网,了解清楚整个脉络。官网:https://www.sourceware.org/gdb/我们这里关注如何使用,所以进入它的在线文档网站:https://sourceware.org/gdb/current/onlinedocs/gdb/(可能大家通过别的链接进入的网站跟这个不一样,那是因为这个gdb网站服务器里有多个版本的文档仓库,而官网这里进去的,总是最新的版本的文档)还给了个pdf文档:
我想使用GDB调试在Linux2.6上运行的进程。attachPID(其中PID是进程ID)、printmain、printsin、printgzopen和printdlopen工作(即他们找到各自的符号)。但是printmyfoo不起作用,其中myfoo是进程使用dlopen.so文件加载的函数。这是我得到的:(gdb)printmain$3={int(int,char**)}0x805ba90(gdb)printsin$4={}0xb7701230(gdb)printgzopen$5={}0xb720df50(gdb)printdlopen$6={}0xb77248e0(gdb)p
我想使用GDB调试在Linux2.6上运行的进程。attachPID(其中PID是进程ID)、printmain、printsin、printgzopen和printdlopen工作(即他们找到各自的符号)。但是printmyfoo不起作用,其中myfoo是进程使用dlopen.so文件加载的函数。这是我得到的:(gdb)printmain$3={int(int,char**)}0x805ba90(gdb)printsin$4={}0xb7701230(gdb)printgzopen$5={}0xb720df50(gdb)printdlopen$6={}0xb77248e0(gdb)p
我在Fedora17上安装了boomerang,在执行./boomerang-gui时我得到:./boomerang-gui:errorwhileloadingsharedlibraries:libQtGui_debug.so.4:cannotopensharedobjectfile:Nosuchfileordirector我做了一个“sudoyuminstallqt-x11”,但是QT已经安装了。 最佳答案 来自错误:./boomerang-gui:errorwhileloadingsharedlibraries:libQtGui