假设我已经将gdb附加到一个进程,并且在它的内存布局中有一个文件和行号,我想要它的内存地址。如何获取文件x中第n行的内存地址?这是在Linuxx86上。 最佳答案 (gdb)infolinetest.c:56Line56of"test.c"startsataddress0x4005aeandendsat0x4005ba.此外,对于python,您可以使用来自Symbol-Tables-In-Python这目前需要来自cvs的最新版本的gdb,但我想将在7.5中普遍可用(gdb)pyx=gdb.find_pc_line(gdb.dec
#include#includeexternchar**environ;intmain(intargc,char*argv[]){inti=0;while(environ[i]){printf("%s\n",environ[i++]);}return0;}这是我的操作:(gdb)n8printf("%s\n",environ[i++]);(gdb)penviron[i]Cannotaccessmemoryataddress0x0(gdb)nLOGNAME=root7while(environ[i]){如你所见,printf可以打印出environ[i],但是penviron[i]给我不
#include#includeexternchar**environ;intmain(intargc,char*argv[]){inti=0;while(environ[i]){printf("%s\n",environ[i++]);}return0;}这是我的操作:(gdb)n8printf("%s\n",environ[i++]);(gdb)penviron[i]Cannotaccessmemoryataddress0x0(gdb)nLOGNAME=root7while(environ[i]){如你所见,printf可以打印出environ[i],但是penviron[i]给我不
我有一个错误的程序,当执行时收到一个SIGSEGV。我可以像这样使用gdb:$gdb./prog但我更希望gdb从prog捕获SIGSEGV并自动附加它。$./progSegmentationFault(gdb)...有办法吗?谢谢 最佳答案 嗯。您可以设置信号处理程序以使用当前进程启动调试器。这样您就可以“实时”检查整个状态。#include#include#include#includeconstchar*prog=0;voidfn(intsignum){charbuf[256];snprintf(buf,255,"ddd%s%
我有一个错误的程序,当执行时收到一个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
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