Questions tagged «gdb»

GNU调试器(GDB)是一种可移植的调试器,可在许多类似Unix的系统上运行并适用于许多编程语言。

2
如何通过GDB进入,过渡和退出?
我help在GDB时打过字,但没有发现任何有关跨入,跨入和跨出的信息。我在_start(break _start)中的Assembly程序中放置了一个断点。之后,我输入next并完成调试。我想那是因为它完成了_start,没有按照我的意愿介入。 有人可以帮忙吗?


3
如何在不优化的情况下使用CMake进行编译-O0
我正在使用Scientific Linux(SL)。我正在尝试编译使用一堆C ++(.cpp)文件的项目。 在目录中user/project/Build,我输入make以编译和链接所有.cpp文件。然后我必须去user/run/然后输入./run.sh values.txt 要使用GDB进行调试,我必须转到user/run,然后键入gdb ../project/Build/bin/Project并运行,输入run -Project INPUT/inputfile.txt。但是,我试图使用打印输出变量的值p variablename。 但是,我收到消息s1 = <value optimized out>。我已经在网上进行了一些研究,似乎我需要在不进行优化的情况下进行编译-O0以解决此问题。但是我应该在哪里输入呢?在CMakeLists?如果是这样,哪个CMakeLists?一个project/Build或project/src/project?

2
gdb手册页中的C @ t {++}是什么意思?
我正在阅读gdb的联机帮助页,但遇到了问题: You can use GDB to debug programs written in C, C@t{++}, Fortran and Modula-2. C @ t {++}看起来像一个正则表达式,但我似乎无法对其进行解码。 这是什么意思?
16 man  documentation  gdb 

2
gdb可以调试suid根程序吗?
我编写了一个调用setuid(0)和的程序execve("/bin/bash",NULL,NULL)。 然后我做了 chown root:root a.out && chmod +s a.out 当我执行时,./a.out我得到一个root shell。但是,当我执行gdb a.out此操作时,它将以普通用户身份启动该过程,并启动一个用户外壳程序。 所以...我可以调试setuid根程序吗?
16 debugging  setuid  gdb 

1
如何使gdb不问我“ y或n”?
当我使用GDB命令add-symbol-file加载符号时,GDB总是问我“ y或n”,如下所示: gdb> add-symbol-file mydrv.ko 0xa0070000 add symbol table from file "mydrv.ko" at .text_addr = 0xa0070000 (y or n) 如何使其不问而悄悄执行?
14 debugging  gdb 

2
转储进程核心而不终止进程
有没有一种方法可以在不真正杀死进程的情况下获得进程的核心转储(或类似的东西)?我有一个在嵌入式系统上运行的多线程python进程。而且我希望能够在正常情况下(例如,需要运行其他进程)获取该进程的快照,但是如果没有python进程,我没有足够的内存来连接gdb(或在gdb下运行)是唯一的跑步。 我希望这个问题有意义。

3
GDB为什么需要可执行文件以及核心转储?
我正在使用核心转储进行调试,请注意,gdb需要您提供可执行文件以及核心转储。为什么是这样?如果核心转储包含该进程使用的所有内存,那么核心转储中是否包含可执行文件?也许不能保证整个exe文件都已加载到内存中(尽管单个可执行文件通常不会那么大),或者核心转储毕竟不包含所有相关内存?是否用于符号(也许它们没有正常加载到内存中)?
11 core-dump  gdb 

2
Unix历史记录:返回代码八进制?
我今天被gdb以下人员措手不及: Program exited with code 0146. gdb以八进制打印返回代码; 调查为什么找到了我:http : //comments.gmane.org/gmane.comp.gdb.devel/30363 但这并不是一个特别令人满意的答案。一些快速谷歌搜索并没有揭示历史,所以我希望SO上的某个人可能知道背景故事。 一个有点相关的问题,如何看待八进制的返回码?也许旧机器总是打印返回码? $ printf %o\\n $? 很尴尬:)
10 gdb  history 

2
如何确定流程正在执行哪些指令?
我知道strace和ltrace,但这仅告诉我进程正在执行的系统调用和库调用。我想确切地知道流程正在执行什么指令。可能是汇编,也可能是C与汇编之间的某种中间立场。假定二进制文件未使用调试符号进行编译,因此更可能选择第一个选项。 用例:进程似乎已挂起,strace或ltrace没有输出。确定过程是否在做“某事”。我意识到这可能很难确定,因为我想这类似于解决暂停问题。但是,有可能收集有用的数据。 第二个用例:好奇心。将整个汇编指令列表转储到文本列表中会很有趣。 我的猜测是我可以使用gdb来执行此操作,但不确定如何执行此操作,因为这与调试我编写的程序有关,而与使用gdb来检查正在运行的进程的运行状况有关。 操作系统是CentOS 6。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.