gpt4 book ai didi

c - 是什么让 GDB 拒绝破解?

转载 作者:太空狗 更新时间:2023-10-29 15:04:51 25 4
gpt4 key购买 nike

我在这里不知所措。我正在用 C 编写一个编译器(出于业余爱好),并使用 GDB 7.3 在 amd64 Linux 2.6.32 上使用 GCC 4.6.1 进行编译。标志是“-Wall -Wextra -O0 -g”,除了通常的 -I 和诸如此类的东西。我有一个函数,其目的是报告解析错误,定义如下:

void cerror_at (struct lex *lex, struct token *tok, const char *fmt, ...)

除了可变参数之外,没有什么奇怪的。问题是 GDB 不会中断它。我已经尝试了所有我能想到的方法(函数断点,函数内部,调用之前,你给它命名),但是一旦我的程序在函数内部,我就会收到类似“警告:删除断点错误0"并且 GDB 只是让程序完成。它没有任何问题(我已经修复了我试图找到的错误,并且一切正常运行),但我无法进入该功能。关于什么可能导致这种情况的任何想法?

编辑:更多信息! GDB 将断点设置在 0x403057。该函数从 0x403025 开始。看这部分的反汇编:

0x0000000000403053 <+46>:   test   %al,%al
0x0000000000403055 <+48>: je 0x403077 <cerror_at+82>

此时,它向前跳到 0x403077(越过断点)。我已经验证将断点放置在“je”之前的地址以及跳转目标 0x403077 或之后的地址,但不在两者之间(GDB 试图放置它的位置)。为什么 GDB 会将断点放在函数的中间?甚至 GDB 都告诉我该函数的地址实际上是 0x403025。

最佳答案

也许我只是太笨了,但我遇到的调试器拒绝中断的最常见原因是最简单的。

  1. 我尝试调试的代码与调试器中的代码不完全匹配。
  2. 我忘了用调试选项编译那个库。

确保在出现此类调试错误时检查这两项,即使您认为这不是问题所在。

关于c - 是什么让 GDB 拒绝破解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com