我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试linux内核。我实际上正在阅读RobertLove的书,但不幸的是它并不能帮助读者了解如何安装适当的工具来运行或调试内核......所以我所做的就是遵循本教程http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse/.我使用eclipse作为IDE在内核上开发,但我想首先让它在QEMU/gdb下工作。所以到目前为止我所做的是:1)编译内核:makedefconfig(thensettingtheCONFIG_D
我运行一个带有LD_PRELOADing特定库的程序。像这样。LD_PRELOAD=./my.so./my_program如何使用gdb运行这个程序? 最佳答案 执行以下操作。gdbyour_program(gdb)setenvironmentLD_PRELOAD./yourso.so(gdb)start 关于c-如何将gdb与LD_PRELOAD一起使用,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我已按照说明ontheGDBwiki安装用于查看STL容器的pythonpretty-print。我的~/.gdbinit现在看起来像这样:pythonimportsyssys.path.insert(0,'/opt/gdb_prettyprint/python')fromlibstdcxx.v6.printersimportregister_libstdcxx_printersregister_libstdcxx_printers(None)end但是,当我运行GDB并尝试打印STL类型时,我得到以下信息:printmyStringPythonExceptionNotypenamed
如何永久更改GDB中的反汇编风格。我试过:setdisassembly-flavorintel在GDB中,但是当我稍后启动GDB时,它仍然有att的味道。 最佳答案 gdb在启动时执行~/.gdbinit文件(如果存在);您应该可以添加该行setdisassembly-flavorintel给它。 关于linux-永久更改GDB中的反汇编风格,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest
我从x86Linux机器上的死进程(内核2.6.35-22,如果重要的话)得到一个全堆核心转储,我正试图在GDB中调试它。有没有我可以使用的GDB命令,意思是“向我显示此进程分配的所有内存地址区域的列表?”换句话说,我能弄清楚我可以在这个转储中检查的所有可能的有效内存地址吗?我问的原因是我需要在整个整个进程堆中搜索某个二进制字符串,为了使用find命令,我需要有一个开始和结束地址。简单地从0x00搜索到0xff..是行不通的,因为find一遇到无法访问的地址就会停止:(gdb)find/w0x10000000,0xff000000,0x12345678warning:Unabletoa
使用这样的函数:#include#include#include#includevoidprint_trace(){charpid_buf[30];sprintf(pid_buf,"--pid=%d",getpid());charname_buf[512];name_buf[readlink("/proc/self/exe",name_buf,511)]=0;intchild_pid=fork();if(!child_pid){dup2(2,1);//redirectoutputtostderrfprintf(stdout,"stacktracefor%spid=%s\n",name_
如何使用GDB列出程序中的所有函数? 最佳答案 infofunctions打印所有已定义函数的名称和数据类型。见16ExaminingtheSymbolTable. 关于c-让GDB列出程序中的所有函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10680670/
我在gdb的目标可执行文件之外,我什至没有对应于该目标的堆栈。无论如何我都想单步执行,这样我就可以验证我的汇编代码中发生了什么,因为我不是x86汇编方面的专家。不幸的是,gdb拒绝进行这种简单的汇编级调试。它允许我在适当的断点处设置和停止,但是一旦我尝试单步前进,gdb就会报告错误“找不到当前函数的边界”并且EIP不会改变。其他细节:机器代码是由gccasm语句生成的,我将它从objdump-d的输出复制到它正在执行的内核内存位置。我不介意使用加载器将我的目标代码加载到重定位地址的简单方法,但请记住加载必须在内核模块中完成。我想另一种选择是生成一个伪造的内核模块或调试信息文件以提供给g
我还没有研究过共享指针……我只知道这个概念。我正在尝试调试以下c++类中的函数,该类存储XML文件的数据(通过xerces库读取)。//headerfileclassParamNode;typedefboost::shared_ptrPtrParamNode;classParamNode:publicboost::enable_shared_from_this{public:...typedefenum{DEFAULT,EX,PASS,INSERT,APPEND}ActionType;boolhasChildren()const;PtrParamNodeGetChildren();Pt
我还没有研究过共享指针……我只知道这个概念。我正在尝试调试以下c++类中的函数,该类存储XML文件的数据(通过xerces库读取)。//headerfileclassParamNode;typedefboost::shared_ptrPtrParamNode;classParamNode:publicboost::enable_shared_from_this{public:...typedefenum{DEFAULT,EX,PASS,INSERT,APPEND}ActionType;boolhasChildren()const;PtrParamNodeGetChildren();Pt