我在armv7平台上调试,我需要看到函数的disass(在C中)。
我使用的是GDB7.3,但是没有disass风格选项。
如何查看英特尔风格的反汇编代码
提前谢谢。为什么?英特尔发布ARM汇编代码的语法是否与ARM不同?GDB使用与gas相同的语法,gas应该与ARM的本机文档和工具的语法相同。intel vs at&t必须使用80x86汇编程序。ARM是另一种处理器,与之无关,汇编程序也不像x86那样被劫持。同样,avr汇编程序与at&t、6502和mips等没有英特尔格式。只有英特尔80x
标签: Gdb
access-deniedcreateprocess
我知道错误5表示“拒绝访问”。(因为数字5是由windows API中的CreateProcess函数抛出的。)
上次我遇到这个问题时,我没有办法解决它。仅仅过了一段时间,这个问题就莫名其妙地消失了
图中的文件P1010.exe可以删除,并且可以通过构建再次生成。我不知道为什么它会抛出“拒绝访问”错误。提前谢谢
对ARM微控制器编程的标准(低成本)方法是使用Eclipse,并插入一个复杂的工具链。Eclipse肯定有它的优点,但我希望感觉自己独立于这个IDE。我想了解在构建(编译-链接-闪存)软件以及运行调试会话时,幕后会发生什么。要获得如此深入的理解,从命令行运行整个过程将是非常棒的
注意:我使用的是64位Windows 10。但这里解释的大部分内容也适用于Linux系统。请打开所有具有管理员权限的命令终端。这可以帮你省去很多麻烦
1。构建软件
第一个“任务”完成了。现在,我可以通过命令行将我的软件编
我在Linux上对此进行了测试,似乎当tracee位于信号处理程序中时,跟踪器可以像往常一样使用ptrace()附加到它。但由于tracee位于信号处理程序中,由于asyn信号安全问题,某些函数可能无法正常调用。那么,在调用ptrace()之后,是否有任何方法可以检测这种情况呢?这可能会引起您的兴趣
简单的回答是,您可以通过展开信号处理程序的堆栈并查找条目来判断SUPER(tracee)是否在信号处理程序中
这是GDB打印为的条目
然而,问题是:你为什么在意
大概是为了防止调试器在最终用户要求您
Ubuntu 16.04.4 LTS,GNU gdb(Ubuntu 7.11.1-0ubuntu1~16.5)7.11.1
我试图在编译的C程序中调用函数,并获得以下结果:
"(gdb) call getVarName(someParam)
You can't do that without a process to debug."
没有其他代码或消息
我可以从shell提示符运行程序
jef@ubuntu美元/方案。
我可以在指定文件后在gdb中运行程序。权限为777(仅涵盖所有基础)
根
我正在调试一个程序,该程序在12核处理器上运行大约100个线程。我只想查看gdb中断调试程序时正在执行的线程的堆栈 你说的死刑是什么意思?是否要筛选中断时正在等待IO的线程?不一定要等待IO。一些线程可能正在等待cpu时间,我只想列出中断时cpu中的线程。执行是什么意思?是否要筛选中断时正在等待IO的线程?不一定要等待IO。一些线程可能正在等待cpu时间,我只想列出中断时cpu中的线程。
标签: Gdb
osx-snow-leopardwatchpoint
我正在使用通过MacPorts for Snow Leopard编译的GDB 7.1调试二进制文件(仅限程序集)。我对使用findgdb命令找到的特定地址感兴趣。因此,它确实是一个有效地址:
(gdb) printf "%s\n", 0x00196f34
bruno
(gdb)
问题是,每当我为它设置一个监视点(watch*0x00196f34)并访问它时,系统就会崩溃并立即重新启动
我注意到硬件观察点已启用,希望结果不那么严重,我使用切换到软件观察点,设置可以使用硬件观察点0,但这并没有解决
在GDB中是否有命名断点的方法,因此当遇到断点时,GDB会给出一些名称而不是数字?(即点击断点!!!VERYIMPORTANTBREAKPOINT!!!在方法main()中)不,没有办法做到这一点,但您可以使用“commands”命令和print命令
e、 g
可能重复的
break main
commands
print "!!!VERYIMPORTANTBREAKPOINT!!! in method main()"
end
假设
(gdb) print *this
产生了20行输出。是的,将有类型继续,或q退出,但我想滚动回到顶部后,我得到了底部的输出
我想这并不能回答我的问题。它说
将活动窗口向上滚动一页
但是当焦点在命令窗口上时,PgUp将回放命令历史记录,而不是在命令窗口中向后滚动。是不是只有我才有这种行为
如果这有什么不同,我使用SSH连接到Red Hat Linux。我在这里找到了答案:
请注意,当SRC窗口具有焦点时,箭头键将移动源代码,但当CMD窗口具有焦点时,箭头键将选择命令历史记录中的上一个和
标签: Gdb
commadev-c++breakpoints
当使用GDB 7.4或7.5(尚未测试较旧版本)时,是否可以向驻留在包含逗号的文件夹路径中的文件添加断点?我一直试图让它工作(在Dev-C++的调试器接口上工作时),但是GDB错误地解释了我的命令
我使用以下命令向GDB发送断点命令:
// sets break at line 13 in mentioned file using filename:linenum
break "C:/Foo,Bar/main.c":13
换句话说,\替换为/以避免意外转义,并且为了额外的安全,在文件名周围添加
我需要检查一个变量,看看它是否设置正确,这可能是在几个循环之后发生的
我现在做的事情如下:
(gdb) b myfile.cpp:180
(gdb) c
(gdb) p decoder.m_msg
(gdb) c
(gdb) p decoder.m_msg
(gdb) c
...
每次程序中断时,是否可以自动打印此变量decoder.m_msg?使用display命令:
(gdb> display decoder.m_msg
这将导致每次显示提示时(不仅在断点之后)都打印decoder
我没有真正理解GDB手册中关于劣质的解释,谷歌也没有给出任何更有用的解释
有人能简单地解释一下“subsier”吗?在gdb中,“subsier”指的是您正在调试的进程。例如
(gdb) help info inferiors
IDs of specified inferiors (all inferiors if no argument).
(gdb) info inferiors
Num Description Executable
* 1 pr
当我在GDB中的一个特定模板函数中设置断点时,它显示了3个不同的断点集,我想这是由于函数的模板性质。其中两个的地址看起来正确,但其中一个类似于0x00…0013。因此,GDB无法继续,它抱怨地址错误。这意味着什么?我能做些什么?
不确定这是否重要,但我像这样设置断点:b file\u name.cc:line\u number。
我可以在位于不同目录的另一个模板函数中成功设置bp。类似,但仍然没有回答我的问题:您是如何设置断点的?看这个:@dbrank0谢谢,很有趣,我来试试。
我在运行GDB时遇到此错误:
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Inferior 1 (proce
标签: Gdb
debug-symbolsbacktrace
如果加载了所有调试符号-gdb backtrace显示如下内容:
#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8) at builtin.c:993
#1 0x6e38 in expand_macro (sym=0x2b600) at macro.c:242
#2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08) at macro.c:71
#0 m4_traceon (
我正在调试一个由内核和一些用户程序组成的系统,我想跟踪其中一个用户程序。问题是它们都加载在同一个虚拟地址;因此,当我在一个地址设置断点时;在我的任何用户程序中,当执行经过此地址时,它会被命中。
我知道解决这个问题的一个方法是将它们加载到不同的地址空间中,但如果有更好的方法,我想避免它
我使用qemu模拟x86体系结构以运行系统(内核+用户代码)。
为了调试,我使用了一个外部gdb客户端,它连接到qemu上运行的gdbserver。如何设置断点?您使用的是什么体系结构?它是什么系统(基于linux
可以这样定义
set $i = 0
但是,在执行时:
或:
,gdb打印
gdb表达式中的语法错误,在“=0”附近
为什么??如何以这种方式使用自定义变量
在或中定义这样一个变量也没有帮助。我刚刚找到了解决方案。这是我的错误:
$i
也是bash语法,因此必须以某种方式从stdin中转义它
gdb <<< "set $i = 0"
$i
我正试图用
(gdb) call fun()
在第三方库libFoo中,我以编译的形式获得了剥离符号
(gdb) info function ^fun$
Non-debugging symbols:
0x00007ffff6d7e3b0 fun
问题是,加载了一个不相关的系统库libBar,其中也包含fun,这一次是一个变量,gdb更喜欢该符号而不是所需的符号。我怀疑这是因为这个命中是一个非剥离调试符号
(gdb) info var ^fun$
File ../bar/baz.c:
256
当在gdb内部/外部运行时,上述命令将给出不同的输出,因为gdb捕获sigtrap信号
如何使我的程序在gdb中表现相同?当下级程序收到任何信号时,gdb将停止下级程序(正在调试)
如果您只是从GDB继续,信号将被“吞没”,这不是您想要的
您可以要求GDB继续该程序,并使用signal SIGTRAP向其发送信号
您还可以要求GDB直接将给定信号传递给下级,而不使用handle SIGTRAP nostop noprint passGDB命令停止。您需要在点击第一个SIGTRAP之前完成此操作,
我想通过控制何时执行哪些线程来调试多线程程序。我用C++和gdB。除了主线程外,我还有两个线程(例如示例程序),我希望调试一个线程,同时停止另一个线程
下面是我编写的示例程序:
#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#define NUM_THREADS 2
using namespace std;
void * run (void *) {
for (int i =
我正在研究GDB的观察点。我编写了一个简单的测试代码,如下所示:
int main(int argc, char **argv)
{
int x = 30;
int y = 10;
x = y;
return 0;
}
I build it via gcc -g -o wt watch.c. And then I started gdb and did following experiment:
lihacker@lihacker-laptop:~/
我刚刚在gdb中调试了一个程序,不知怎的,我发现了一个我以前从未见过甚至听说过的新功能,一个拆分视图,在该视图中,除了发出命令外,我还可以查看和浏览代码:
这是什么?我做了什么,或者更具体地说,我如何再次获得这种分屏模式?这个模式有名字吗?或者我可以在什么地方读到如何使用它?它叫TUI(不是开玩笑的)。例如,从gdbtui或gdb-tui开始
请参见作者的。据我所知,它在2012年不可用,但绝对值得一看。您也可以使用“-”(dash)命令从gdb shell启动它。但不确定如何动态关闭它。您
标签: Gdb
segmentation-faultstack-trace
我试图找出系统库级别上发生segfault的原因。
我想获得一些关于如何使用gdb检查以下堆栈跟踪中看到的getenv()调用的参数的提示
如跟踪所示-getenv()不是由我的代码直接调用的-调用嵌套在我的代码中启动的系统调用链中。调用从我的例程a_logmsg()开始,尝试获取线程安全的localtime-localtime\r(),然后在libc代码中的某个地方调用getenv()。操作系统是Solaris 8/SPARC
Program terminated with signal 11
标签: Gdb
x86-64freepascalfpc
我试图调试一个64位程序,但gdb似乎认为它有一个i386架构
# file /usr/local/bin/foo
/usr/local/bin/foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped
# gdb --args foo bar
GNU gdb (GDB) 7.3.1
Cop
我想调试一个程序,但我不想让GDB将它访问的代码打印出我的本地源文件范围。在这种情况下,选项step(进入每个调用)和next(即使在同一源文件中也跳过进入函数的步骤)没有用处
有相同的观点吗
谢谢也许可以尝试使用DDD(数据显示调试器)。提醒了很多关于gdb的事情
输入:
ddd --gdb
然后
希望它能有所帮助您可以看到我的答案:没有本地GDB命令(据我所知,他们可能已经在这方面工作过),但在Python中很容易做到:
import gdb
class StepNoLibrary (g
当我使用gdb bt时——我看到一些帧以地址开头,而一些帧则不是——为什么有些函数不以地址开头
#6 0x000000000041fd1d in func (argc=0, argv=0x8723a0, t=<value optimized out>) at file1.c:55
#7 record (argc=0, argv=0x8723a0, x=<value optimized out>) at file3.c:11
#6 0x000000000041fd1d
如何在该二进制文件的某个特定文件中的某个行no处为特定函数设置断点
如果我给出直接行号或func名称和文件号,它将无法识别。请帮助
(gdb) b processMessage
No symbol table is loaded. Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) file aqm_wfmgr
Reading symbols
我正在编写一个运行GDB和一系列GDB命令的脚本。
我的一个命令file myfile.elf生成警告消息
warning: Loadable segment ".func_addrs" outside of ELF segments
warning: Loadable segment ".aux_info" outside of ELF segments
我曾尝试在GDB中使用setverbose off命令来关闭这些功能,但没有成功
有人知道我如何阻止这些消息吗
谢谢 在gdb中没有这样做
我目前正在Windows上运行Cygwin,以便使用GCC并避免使用Visual Studio和MinGW
GCC工作得很好,但是GDB做得并不好。GDB无法检测分段错误-您可以看到这将是一个巨大的问题。当运行gcc生成的带有问题代码的默认a.exe文件时,终端输出“分段故障(堆芯转储)”。很好,很好。然而,当在gdb下运行这个gcc-g(可能还有-O0)编译程序时,这是我的输出
Starting program: /home/Beo/a.exe
[New Thread 25968.0x650
标签: Gdb
qemuprocessoremulation
因此,我将一个新的特定arch集成到QEMU仿真器中(QEMU中的实现类似于OpenRISC arch,因此在回答问题时可以依赖这个arch),并运行一些测试。
QEMU的版本为2.0.93
当我在正常模式下运行测试时,QEMU以错误的答案结束
当im在-singlestep模式下运行时,QEMU在运行singlestep时无法通过我的断言将多个命令放入TargetBlock
当我使用GDB运行QEMU时,它提供了singlestep\u enabled模式,var等于7(意思是SSTEP\u
您可以运行gdb,而无需打印前面的材料,这描述了
gdb的非担保,通过指定--silent(或-q/--quiet):
.gdbinit中是否有与gdb-q相同的选项
我不介意看到重要的保修资料,但不是每次我启动gdb时。我知道我可以使用alias,但我对配置文件很好奇
我查阅了网站文档,阅读了手册页,但看不出这是否可行。我对此很好奇,所以我查看了源代码。没有办法做到这一点
首先,这依赖于参数解析函数中的局部变量(captured\u main)。其次,在读取~/.gdbinit之前打印消息
我在使用gdbserver时调试时遇到问题。gdb显示加载一个共享库时出错
Error while mapping shared library sections:
`target:<path to library>': not in executable format: Invalid argument
我发现gdb版本7.10+在我的特定二进制文件中有这个问题。还是不知道为什么。这在7.9中运行良好,因此我降低了级别以克服此问题。我发现gdb 7.10+版在我的特定二进制文件中
为什么运行后GDB中的内存映射会发生变化?
例如,下面的主函数最初为0x00000560,然后在run之后为0x80000560
是否可以以从一开始就显示真实映射的方式运行/配置gdb
Reading symbols from prog...(no debugging symbols found)...done.
(gdb) disas main
Dump of assembler code for function main:
0x00000560 : push %ebp
0
我知道我们可以在gdbset print pretty中启用pretty打印。但是否有一个未解决的问题?我有时想切换它。我在Stackoverflow中找不到任何文档,也找不到任何答案。使用
set print pretty off
发件人:
将打印设置为“漂亮”
使GDB以缩进格式打印结构,每行一个成员,如下所示:
$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x
标签: Gdb
interruptspecificationsriscvusermode
刚刚读完RISCV规范,更具体地说是“第二卷:RISC-V特权体系结构”,并对GDB(或任何其他调试器)应该如何工作提出了一个问题
基本上有两种编译标准GDB的方法:基于硬件或基于操作系统
一个区别是“单步指令”(si命令)——对于基于操作系统的指令,它是通过在每个可能的后续指令(下一条汇编指令,如果当前是条件分支,则可能是另一条汇编指令)上放置一个软件断点(将汇编指令替换为“断点”汇编指令)来实现的。忽略可能的中断、页面错误、操作系统请求等
对于基于硬件的GDB,没有任何内容是隐藏的,因此使用
在大型C应用程序上,我在内存地址上设置了一个硬件观察点,如下所示:
(gdb) watch *0x12F5D58
Hardware watchpoint 3: *0x12F5D58
正如你所看到的,这是一个硬件观察点,而不是软件,这将解释缓慢
现在,调试器下的应用程序运行时间已从不到10秒更改为1小时,并且正在计数。到目前为止,观察点已经触发了三次,第一次是15分钟后,包含地址的内存页被sbrk读取。在这15分钟内,由于内存页不可访问,观察点应该是有效的吗?但这仍然不能解释为什么之后会这么慢
Ubuntu 10.10,GDB7.2。
我连接到一个应用程序,观察每个线程中的堆栈,一切看起来都很好。生成核心文件并尝试在gdb中打开该核心转储。回溯中未显示任何例程
我将SIGSEGV发送到应用程序,并在gdb中打开这个新的coredump。堆栈正常且冗长
请告诉我您是否在GDB中遇到过类似的生成核心文件的错误行为。。该链接还提供了一个修补程序,用于修复该问题。FYI,对于从源代码构建gdb的任何人,以下是Ubuntu 12.04 beta版的相应错误,该修补程序针对gdb 7.4+进行了更
标签: Gdb
eclipse-cdtbreakpoints
在我遇到一些问题,不得不从头开始重新创建我的项目之前,我设法禁用了这个功能(我想),但就我而言,我现在找不到了!问题似乎在于在eclipse中可以找到800万个不同的调试设置位置
有人知道如何禁用此功能吗?转到运行/调试配置/调试器/启动时停止:[main]请参阅此处:
有人能告诉我在gdb中使用进程记录/重播功能时,执行日志将存储在哪里吗
谢谢
拉吉
更新
#include <stdio.h>
int main (int argc, char const *argv[])
{
printf("Hello World\n");
printf("How are you?\n");
char *c = NULL;
printf("%c\n", *c);
return 0;
}
#包括
int mai
使用gdb,我需要在continue之前和它中断后立即运行额外的命令。我想我会这样做一个用户定义的命令:
define continue
pre_continue
continue
post_continue
end
当然,这在无底洞中是失败的。有没有办法绕过用户定义的命令直接调用内置命令
顺便说一句:我需要将命令命名为continue,以便我使用的gdb前端将调用我的用户定义函数。就是您要查找的:
您可以定义钩子,这是一种特殊的用户定义的钩子
指挥部。无论何时运行命令
标签: Gdb
reverse-engineering
是否可以不使用任何file.out和源代码,而只使用二进制文件?
知道var的名称后,是否可能在运行时找到并读取该值
知道var的名称后,是否可能在运行时找到并读取该值
视情况而定
如果变量是一个全局变量,并且二进制文件没有被剥离,那么您应该能够用一个简单的
x/gx &var
print var
后者可能会打印变量,就像它是int类型一样(如果二进制文件没有调试信息),这可能不是您想要的
如果变量是本地的(自动的),那么您只能在声明它的例程中打印它(显然)
如果二进制文件有调试信息,
标签: Gdb
memory-addressdisassembly
我试图理解一个使用gdb的小二进制文件,但有一点我找不到实现的方法:如何找到指向指定地址的跳转列表?
我在反汇编代码中有一小部分指令,我想知道在哪里调用它。
我首先考虑在.text中搜索相应的指令,但由于有很多种跳转,并且地址可以是相对的,所以这不起作用
有办法吗
或者,如果我在这个地址上放了一个断点,有没有办法知道上一条指令的地址(在本例中是跳转)?如果这是从其他地方调用的某个子例程,那么它在调用时必须遵守某些ABI。
根据使用的CPU,返回地址(以及调用它的位置)将存储在某个位置(堆栈上或某
我正在用GDB在linux下调试一个程序,这个程序当然包含bug,我想要的是运行这个程序的调试版本,当它遇到错误时,在堆栈跟踪退出之前转储堆栈跟踪。您可以使用execinfo.h中的backtrace函数打印堆栈跟踪您可以使用execinfo.h中的backtrace函数打印堆栈跟踪假设您询问如何在gdb中执行此操作
在gdb中,backtrace或bt是在遇到错误后要使用的命令。它将打印完整的堆栈跟踪
之后,您可以使用frame和各种info命令来切换帧和检查内容。假设您询问如何在gdb中执行
我在tmux中使用gdb——tui模式时遇到问题。单步执行代码后,代码显示变得混乱。我正在使用GDB7.6.1和TMUX1.6。我也试过TMUX1.9a,但仍然遇到这个问题。tui模式下的gdb在tmux之外工作良好
OS: CentOS release 6.4
Terminal emulator: terminator
TERM=xterm-256color
谢谢
事实上,我刚刚解决了这个问题。我把术语改为screen-256color,它就可以工作了。谢谢 您的操作系统、终端仿真器程序和
如果我使用-g标记编译文件启动gdb-tui或gdbtui,然后设置b main并按r我会得到提示dl debug.c:74没有这样的文件或目录,在通过源代码窗口时的输出将写入底部的源代码窗口,这也弄乱了这个窗口,所以它不是真正可读的。我已经查看了这个网站,但没有找到解决方案
我还在另一台机器上尝试了sudo-apt-get-install-ddd,以排除故障,但随后我只遇到了身份验证失败,我也遇到了同样的问题
任何帮助或暗示都将不胜感激
dl debug.c:74没有这样的文件或目录
此消息表
我在Arndale 5250板上编译了GDB 7.8以进行本机调试,linaro 3.12(2013)。GDB被配置为“ARMLinuxGnueAbiHF”,并使用静态链接库构建。
它在板上工作正常,但处于“录制和重播模式”。当遇到printf语句时,它会生成以下消息:
"Process record and replay target doesn't support ioctl request 0x7efff06c ()
( null)Process record: infer
我有一个gdb函数,在gdbinit文件中定义:
define myfunc
set $retval = SOMEHOW_RET_VALUE_OF shell my-shell-command
if $retval == 0
load my-output
else
echo command not succeeded, not doing anything.\n
end
end
如何获取我的shell函数返回状态并使用它来控制加
默认情况下,使用p variable name将显示$num=variable value,$num是变量名,但有办法打印变量名和变量值,如$num=variable name=variable value
我要这个,因为我用
define p
set $i = 0
while $i < $argc
eval "print $arg%d", $i
set $i = $i + 1
end
end
define p
设置$i=0
而$i
当我在GDB中设置一个断点并向其附加一个命令列表时,如果我在这个命令列表中执行一个next,以下命令将被忽略,这是正常的,请参见
然而,它可能是非常有用的,我可以覆盖这个限制。。。那么,是否可以执行命令块中的下一个命令以及以下命令
e、 g:
break 8
commands
next
set i = i+1
continue
end
那么,是否可以执行命令块中的下一个命令以及以下命令
没有GDB,不。您不能从断点命令列表中执行next或cont,但您可以用Py
我有一个类似于以下内容的项目层次结构:
src/
code.c
ext/
lib/
lib.c
lib.a
bin/
bin-code (+x)
obj/
code.o
lib.c使用-g2标志,然后使用ar编译成lib.a
code.c使用-g2标志编译成bin/obj/code.o
lib.a和code.o然后链接到二进制bin code
我在bin code中遇到了一个bug,我正试图使用GDB加载lib的符号/源代码,以便用TUI检查它
我正
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 38 页