我已经在本地构建了Chromium,并尝试使用GDB对其进行调试。由于某些原因,某些断点似乎没有命中。例如,当我这样做的时候
b InjectedScriptBase::makeEvalCall
GDB提示
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (InjectedScriptBase::makeEvalCall) pending.
但当相关代码被触发时,不会命中断点。
我做错了什么?我现在假设相关的符号是在运行时加载的,但是我应该单独加载它们吗?
我的理解是,gdb可以监视运行程序的完整状态。我能否保存在断点处暂停的gdb会话,然后稍后继续会话?
我的第一次尝试只是在第一个gdb会话中生成一个核心转储,该会话在断点处暂停,然后使用核心转储启动第二个gdb会话。
这导致了以下错误。
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
所以断点信息被插入到程序状态中,很有趣。在我的第二次尝试中,我做了同样的事情,但这次我在第二次会议中添加了与第一次会话相同的断点。
尽管如此,我还是会犯同样的错误。
我可以保存并重新启动gdb会话吗?如果是这样的话,是怎么做的?
我
我有一个CS项目,我需要扩散一个炸弹(如果你听说过Mr.Evil炸弹),但我在gdb上遇到了问题,当我想设置断点的线。当我在gdb中打开这个文件并尝试随机换行时,我得到了这个问题:
gdb bomb
(gdb) break 15
No symbol table is loaded. Use the "file" command.
此外,即使我使用"file“命令,我也会得到
"/auto/bunter_usr/bomb": not in executable format: File format not recognized
我意识到问题是
我正在为一个STM32嵌入式系统调试这个软件。在其中一个函数中,我的程序总是碰到某种断点:
SIGTRAP,跟踪/断点陷阱
但是,在GDB中,当我执行info breakpoints时,就会得到No breakpoints or watchpoints。断点实际上对应于我很久以前在可执行文件的另一个版本中设置的一个断点。当我设置断点时,GDB告诉我automatically using a hardware breakpoint on read-only memory (或类似的消息)。
我认为硬件断点仍然在我的芯片上,尽管加载了新版本的软件。如果确实存在虚假的断点,我如何定位和删除它
在gdb中,我如何根据指针的值设置条件断点,记住在取消引用指针之前必须检查指针是否为null?
下面是我尝试调试的代码示例:
#include <iostream>
using namespace std;
int main () {
int *i[10];
int *j = NULL;
int k;
i[4] = new int;
*i[4] = 8;
for (k=0; k < 10; k++) {
j = i[k];
}
return 0;
}
我在"j=ik“行设置了条件断点,但是我得到了一个seg错误:
(gd
我正在尝试实现一个radix sort,而这段代码会产生内存错误:
(free(): invalid next size (fast))
守则如下:
unsigned int * radix(unsigned int *x,int n, int g,bool verbose)
{
int elem_size = sizeof(unsigned int)*8;
int mask = ((1<<g)-1);
float num_rounds= ((float)elem_size/(float)g);
int B = 1 << g; /
我做了一个非常简单的程序,它为我自动化了一些事情。我用c++写的,它可以在Windows上运行。在使用GDB从Codeblocks内部调试它时,我突然得到了许多断点。我不知道是什么导致了这个问题。断点似乎与内存问题有关...因为当我修复了我检测到的内存泄漏时,断点数量明显减少了。
gdb告诉我的确切情况是:
Program received signal SIGTRAP, Trace/breakpoint trap.
In ntdll!TpWaitForAlpcCompletion () (C:\Windows\system32\ntdll.dll)
我在我的程序中得到了很多很多次。我认为
我使用的是一个不使用异常的C++代码库,按照惯例,每个函数在失败时返回false,因此代码的很大一部分如下所示:
bool compute_something(int& result) {
bool ok = step1();
ok = ok && step2();
ok = ok && step3();
...
ok = ok && stepN(result);
return ok;
}
调试错误时,每当程序中任何名为"ok“的变量变为false时,我都会添加一个断点,以便找到错误