Variables gdb声称它是哪个变量
我是一名工程师,不是代码编写者。(来自法国,请原谅我有时英语不好)因此我缺乏基本知识,例如“gdb”: 我正在openmp子句中开发的fortran程序。 gdb给了我程序无法到达的内存位置的地址,但我想知道有问题的变量的名称,以便帮助我找到出错的地方 gdb在我的精确案例中说,如何给出位于0x00002aaaab455ca的变量的名称 谢谢,, 大卫 我可能需要一个gdb脚本给我所有变量的地址,但我也不知道如何做到这一点;你能给我一个地址在哪里学习吗?多谢各位 编辑:我使用gfortran的方式如下: $gfortran输入.f-g-freal-8-real-16-o输出 EDIT2:对不起,我当然用-fopenmp;我还使用了前面编译中的所有警告,以便为生产运行提供非常“干净”的代码。(我已经检查了所有可能的,我只需要SEGFULTS变量的名称,以便更正其索引的计算) 你能给我一个地址在哪里学习吗 这样的问题在这里是离题的,但这里有一个关于GDB的问题 你有两个选择:Variables gdb声称它是哪个变量,variables,segmentation-fault,gdb,fortran,memory-address,Variables,Segmentation Fault,Gdb,Fortran,Memory Address,我是一名工程师,不是代码编写者。(来自法国,请原谅我有时英语不好)因此我缺乏基本知识,例如“gdb”: 我正在openmp子句中开发的fortran程序。 gdb给了我程序无法到达的内存位置的地址,但我想知道有问题的变量的名称,以便帮助我找到出错的地方 gdb在我的精确案例中说,如何给出位于0x00002aaaab455ca的变量的名称 谢谢,, 大卫 我可能需要一个gdb脚本给我所有变量的地址,但我也不知道如何做到这一点;你能给我一个地址在哪里学习吗?多谢各位 编辑:我使用gfortran的方
(告诉您程序崩溃的位置)where
(告诉您导致崩溃的指令)x/i$pc
(这与上面的内容一起,应该会给出程序试图访问的确切地址)信息寄存器
,info locals
,info globals
(提供本地和全局变量的列表,还可能告诉您需要关于崩溃地址的信息)info addr 0x..
如果以上还不够,您应该编辑您的问题,以显示您取得了多大的进步(即上述命令的输出),我们可能会为您提供更多帮助。但是在这样一个低速连接上进行调试是很困难的,所以你真的应该试着找一个更接近你的人(即使用选项(2))。你如何编译你的代码?哪个编译器?哪些旗帜?相关代码是什么样子的?请编辑您的问题。您没有使用编译器选项
-fopenmp
,因此编译器没有使用OpenMP。尝试使用-fcheck=all
,编译器可能会在不需要使用gdb的情况下发现问题。对于调试,我建议使用以下选项:-fimplicit none-Wall-Wline truncation-Wcharacter truncation-Wsurprising-Waliasing-Wimplicit interface-Wunused parameter-fcheck=all
为什么在edit 1中向我们显示命令行,然后说您实际使用了其他命令行?那你到底用什么?不要使用编辑1、编辑2、编辑3。。。但要让它成为一个好的、明确的问题。请阅读“帮助”部分中的“如何提出好问题”。对不起,弗拉基米尔,这不是很清楚;这是因为我在度假,我想知道周一我能在工作中做些什么;因此,我提供的信息仅依赖于我对我认为在每次回答时重要的事实的记忆/回忆。我只能在星期一给你确切的命令;下周见;-)嗨,弗拉基米尔F,新年快乐;我实际编译程序的方式是:$echo;回声;回声;回声;回声;gfortran/S/DATA/DVA/F90/BN/SS.f-fdefault-real-8-fbounds check-fopenmp-g-pedantic errors-Wall-Wconversion-Wsurprising-Wunderflow-Wunused labels-Wline截断-W-o./s2>tmp;tmp和我以这种方式运行它,它在单个线程上正确结束,但仍然有错误的结果;所以这是我自己的责任2> &1./s1p2srfd04bar el04BAR.inp谢谢。大卫杜克使用俄语,我将尝试按照你提到的(1)做,即“学习足够的GDB来调试这个问题”;到目前为止,我只知道gdb的bt回溯;它告诉我程序在哪一行代码上崩溃。因此,我可以猜出哪个数组有问题,并更正其索引的计算。(几乎总是同一个问题,或者任何其他问题都太容易了)但是,使用OPENMP时,它会在主“PARALLEL DO”指令上崩溃,该指令的子句枚举程序中的所有变量,将它们放在一个线程的私有或所有线程之间共享。(续…)所以所有变量都在同一条指令上命名,我猜不出其中哪一个出错。顺便说一句,我不介意在这么慢的连接上调试,它给了我足够的提示,而且真的没有人能帮助我,因为连我公司的人都不懂fortran。再见,David@dva2tlse请再读一遍我的答案。您的问题不太可能与变量有关。您的第一步应该是查看导致崩溃的指令。除非您告诉我们该指令是什么(以及寄存器的值),否则您将得不到任何进一步的帮助。好的,我将在周一的工作中这样做,但我只是想知道我如何才能试着理解发生了什么。@dva2tlse我将重复最后一次:为了理解发生了什么,您的第一步应该是查看导致崩溃的指令。