草庐IT

c++ - 从 gdb 设置 std::string 变量值?

是否有可能...当调试器在断点处停止时,可以修改std::string变量的值,而无需借助诸如调整当前缓冲区的内存镜像之类的技巧?例如类似“setvarmystring="helloworld"? 最佳答案 试试这个(测试并为我工作):callmystring.assign("helloworld")关键是不是直接修改内存,而是调用对象的函数来改变它的状态。碰巧std::basic_string有一个名为assign的成员函数来完成这项工作。 关于c++-从gdb设置std::strin

C++ Linux Binary 以信号 SIGKILL 终止 - 为什么? (加载到 GDB 中)

所以我在GDB中启动了我的c++应用程序,当它退出时,我基本上得到了:[Thread0x7fff76e07700(LWP6170)exited][Thread0x7fff76f08700(LWP6169)exited][Thread0x7fff77009700(LWP6168)exited]...ProgramterminatedwithsignalSIGKILL,Killed.Theprogramnolongerexists.(gdb)我真的不知道为什么会发生这种情况,为什么我不能回溯看看它是如何退出的?有人有想法么?它不应该结束:(谢谢! 最佳答案

C++ Linux Binary 以信号 SIGKILL 终止 - 为什么? (加载到 GDB 中)

所以我在GDB中启动了我的c++应用程序,当它退出时,我基本上得到了:[Thread0x7fff76e07700(LWP6170)exited][Thread0x7fff76f08700(LWP6169)exited][Thread0x7fff77009700(LWP6168)exited]...ProgramterminatedwithsignalSIGKILL,Killed.Theprogramnolongerexists.(gdb)我真的不知道为什么会发生这种情况,为什么我不能回溯看看它是如何退出的?有人有想法么?它不应该结束:(谢谢! 最佳答案

c++ - 如何在没有源代码的情况下检查 GDB 中的 std::string?

我正在尝试调试一个没有可用源代码的程序,我需要查看它存储在std::string中的内容。我一直在谷歌搜索和查看这里,我发现了一些关于输出STL容器的信息,但所有这些信息都是指变量,没有源或调试信息,我所拥有的只是类数据的内存偏移量。有没有办法做到这一点? 最佳答案 每个std::string实现都有一个指向其中某个地方的原始字符的指针。对于g++4.x,该指针位于字符串中的偏移量0。如果您知道字符串位于例如0x7fffffffda88,然后print*(char**)0x7fffffffda88是你需要的。

c++ - 如何在没有源代码的情况下检查 GDB 中的 std::string?

我正在尝试调试一个没有可用源代码的程序,我需要查看它存储在std::string中的内容。我一直在谷歌搜索和查看这里,我发现了一些关于输出STL容器的信息,但所有这些信息都是指变量,没有源或调试信息,我所拥有的只是类数据的内存偏移量。有没有办法做到这一点? 最佳答案 每个std::string实现都有一个指向其中某个地方的原始字符的指针。对于g++4.x,该指针位于字符串中的偏移量0。如果您知道字符串位于例如0x7fffffffda88,然后print*(char**)0x7fffffffda88是你需要的。

【Linux】编译器gcc和g++与调试器gdb的使用

文章目录一、Linux编译器-gcc/g++1.程序运行的四个阶段1.1预处理1.2编译1.3汇编1.4链接2.链接方式与函数库2.1动态链接与静态链接2.2动态库与静态库3.gcc/g++的使用二、Linux调试器--gdb1.debug与release2.gdb的使用一、Linux编译器-gcc/g++1.程序运行的四个阶段我们知道,一个程序被运行起来之后需要经历四个阶段然后才变成一个可执行的程序,他们分别为:预处理,编译,汇编和链接。下面我们将介绍这四个阶段的操作,测试代码如下:#include//宏定义#defineN10intmain(){ //测试注释 //printf("hell

c++ - 在 gcc 中禁用 "if(0)"消除

如何防止GCC消除if(0)block内的代码?当我使用VisualStudio时,我的调试技巧之一就是将这样的代码放入我的程序中:if(0)do_some_debug_printing_and_checking();然后,当一个断点被命中时,我点击do_some_debug_printing_and_checking()行,选择“设置下一条语句”并强制它执行。当我使用gcc/gdb作为后端时,“设置下一条语句”不再起作用,因为GCC只是从if(0)语句中删除了代码。p>我当然使用-O0标志来禁用优化。我还尝试了-fno-dce-fno-tree-dce标志来明确禁用死代码消除,但它没

c++ - 在 gcc 中禁用 "if(0)"消除

如何防止GCC消除if(0)block内的代码?当我使用VisualStudio时,我的调试技巧之一就是将这样的代码放入我的程序中:if(0)do_some_debug_printing_and_checking();然后,当一个断点被命中时,我点击do_some_debug_printing_and_checking()行,选择“设置下一条语句”并强制它执行。当我使用gcc/gdb作为后端时,“设置下一条语句”不再起作用,因为GCC只是从if(0)语句中删除了代码。p>我当然使用-O0标志来禁用优化。我还尝试了-fno-dce-fno-tree-dce标志来明确禁用死代码消除,但它没

c++ - 设置 GDB 硬件观察点/如何设置软件观察点

Anearlierquestion解释说,在x86上,正在监视的对象的大小受调试寄存器的限制。正如所料,我可以“观察”一个双变量。但是我不能看双数据成员,例如,watchpObject->dPrice生产Hardwarewatchpoint1:pObject->dPrice但是当你尝试继续执行时,它会说Couldnotinserthardwarebreakpoints:Youmayhaverequestedtoomanyhardwarebreakpoints/watchpoints.即使这是唯一断点/观察点。我很好奇为什么会这样,但更重要的是有没有办法解决它?根据GDB文档,如果它不能

c++ - 设置 GDB 硬件观察点/如何设置软件观察点

Anearlierquestion解释说,在x86上,正在监视的对象的大小受调试寄存器的限制。正如所料,我可以“观察”一个双变量。但是我不能看双数据成员,例如,watchpObject->dPrice生产Hardwarewatchpoint1:pObject->dPrice但是当你尝试继续执行时,它会说Couldnotinserthardwarebreakpoints:Youmayhaverequestedtoomanyhardwarebreakpoints/watchpoints.即使这是唯一断点/观察点。我很好奇为什么会这样,但更重要的是有没有办法解决它?根据GDB文档,如果它不能