我有一个宏,其定义大约有50行,并且有很多“ifelse”语句。此宏def'n出现在.h文件中。我正在运行“TUI模式下的gdb”,但是当执行到该宏时,代码窗口变为空白,仅在执行宏代码后才返回。我想逐行执行完整的宏代码。请让我知道如何做到这一点(一种方法是用代码中的定义替换宏,然后重新编译它。我不想使用这个选项,因为我的代码中有几个这样的宏)。任何帮助将不胜感激。期待得到这个问题的解决方案。请让我知道这个问题是否有其他方法而不是使用预处理文件?我有一个代码运行到数百个.c和.h文件中。 最佳答案 一种选择是完全预处理您的C文件,展开
在openSUSE、CentOS、Fedora和Ubuntu上使用gdb看到:此gdb配置为“x86_64-unknown-linux-gnu”。(gdb)psizeof(void*)$1=4(gdb)psizeof(长)$2=4为什么gdb在我的所有64位系统上都给我错误的答案? 最佳答案 当您不调试任何特定代码时,似乎gdb选择了一些令人惊讶的默认值。如果你像这样加载一个64位可执行文件:gdb/bin/sh你会得到一个不那么令人惊讶的结果:(gdb)psizeof(void*)$1=8你也可以明确地告诉gdb要做什么:(gdb
谁能指导如何使用GDB调试器在Linux上调试JNI代码(如果可能,请建议其他选项)。-MyJNIprojectwhenrunningonLinuxisleadingtoaJVMcrash.-TheCPPcodehasbeencompiledinto.sofiles.-Iruntheprojectlikethis:*javaxyz.jar-commandline_args_to_project*.我安装了Gdb,但不知道如何使用它调试项目。我还需要使用-g选项编译.cpp文件并调试.so文件吗? 最佳答案 启动您的Java应用程序使
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion请同时考虑商业和免费调试器。还想看看各自的优缺点。
我正在尝试从Linuxamd64上的gdb中调查C/C++堆的状态,有没有好的方法可以做到这一点?我尝试过的一种方法是“调用mallinfo()”,但不幸的是我无法提取我想要的值,因为gdb没有正确处理返回值。我不容易为我附加的进程编写一个要编译成二进制文件的函数,所以我可以简单地实现我自己的函数,通过在我自己的代码中调用mallinfo()来提取值.是否有一个聪明的技巧可以让我即时执行此操作?另一种选择是定位堆并遍历mallocheader/空闲列表;我将不胜感激任何关于我可以从哪里开始寻找它们的位置和布局的指示。我已经尝试使用Google并阅读了大约2个小时的问题,我学到了一些有趣
我正在gdb中调试程序,我希望程序在访问内存区域0x08049000到0x0804a000时停止。当我尝试手动设置内存断点时,gdb似乎一次不支持超过两个位置。(gdb)awatch*0x08049000Hardwareaccess(read/write)watchpoint1:*0x08049000(gdb)awatch*0x08049001Hardwareaccess(read/write)watchpoint2:*0x08049001(gdb)awatch*0x08049002Hardwareaccess(read/write)watchpoint3:*0x08049002(gd
我在Eclipse上有两个项目,一个生成so,另一个是使用它的Android应用程序我正在尝试使用thisguide调试so中的native代码.我将我的应用程序设置为可调试我在Debug模式下启动了我的应用程序我运行ndk-gdb当我运行native调试器时,我得到:ErrorinfinallaunchsequenceFailedtoexecuteMIcommand:-gdb-settarget-asyncoffErrormessagefromdebuggerbackend:Cannotchangethissettingwhiletheinferiorisrunning.Cannot
例如,我知道0x46767f0属于一个NSString*,有什么办法可以找出它是什么NSString来帮助我找到我想要的一些错误? 最佳答案 我相信您正在寻找:infosymbol打印存储在地址addr中的符号名称。如果没有符号恰好存储在addr中,GDB会打印最近的符号及其偏移量。示例:(gdb)infosymbol0x400225_start+5insection.textof/tmp/a.out(gdb)infosymbol0x2aaaac2811cf__read_nocancel+6insection.textof/usr/
考虑以下示例:intsize=10,*kk=newint[size];for(inti=0;i如何为整个数组添加监视?我可以一个一个地添加一个watch(kk[0],kk[1]...),但是因为我知道数组的长度是有办法的它自动吗?我的意思是kk[0..size-1]左右。我将NetBeansIDE与cygwing++和gdb一起使用。 最佳答案 试试display*kk@来自打印命令的文档:@isabinaryoperatorfortreatingconsecutivedataobjectsanywhereinmemoryasana
我可以通过使用gdb命令设置捕获点来告诉gdb调试器在引发任何C++异常时立即停止catchthrow但是,有没有办法只在未捕获C++异常(如在C#或Java中)处停止?这会让在某些情况下更容易发现错误。谢谢! 最佳答案 如果一个异常未被捕获,特殊库函数terminate()被自动调用。Terminate实际上是指向函数的指针,默认值是标准C库函数abort().您也许可以在调用abort()时设置断点。函数并从那里识别未捕获异常的位置。breakabort...run...bt您可以安装自己的terminate()函数使用std: