Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C &引用;源文件比可执行文件“更新”;除了它不是';T_C_Linux_Makefile_Gdb_Ccache - Fatal编程技术网

C &引用;源文件比可执行文件“更新”;除了它不是';T

C &引用;源文件比可执行文件“更新”;除了它不是';T,c,linux,makefile,gdb,ccache,C,Linux,Makefile,Gdb,Ccache,GDB抱怨我的源文件比可执行文件更新,而且调试信息似乎确实与源文件的旧版本有关,因为GDB在一个空行上停止: Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) up #1 0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246 warning: Sou

GDB抱怨我的源文件比可执行文件更新,而且调试信息似乎确实与源文件的旧版本有关,因为GDB在一个空行上停止:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) up
#1  0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246
warning: Source file is more recent than executable.
246
(gdb) list
241             if (versionBytes == CB_HD_KEY_VERSION_TEST_PUBLIC
242                     || versionBytes == CB_HD_KEY_VERSION_TEST_PRIVATE)
243                     return CB_NETWORK_TEST;
244
245             return CB_NETWORK_UNKNOWN;
246
247     }
248
249     uint8_t * CBHDKeyGetPrivateKey(CBHDKey * key) {
250
但可执行文件比源文件更新,请参见此处:

$ ls -l library/src/CBHDKeys.c 
-rw-r--r-- 1 matt matt 9249 Apr 29 22:40 library/src/CBHDKeys.c
$ ls -l bin/noLowerAddressGenerator 
-rwxr-xr-x 1 matt matt 17845 Apr 30 15:52 bin/noLowerAddressGenerator
我尝试在
makeclean
ccache-C
之后重建,但同样的问题也出现了。更新源文件时,我只添加了空格,因此程序逻辑保持不变。我觉得这与此有关,但由于我清除了ccache,并使用
make clean
清除了build和bin目录,我不确定发生了什么

版本:

  • GNU Make 3.81
  • 通用条款(Debian 4.8.2-16)4.8.2
  • GNU gdb(gdb)7.6.2(Debian 7.6.2-1)
  • ccache版本3.1.9
  • SolydXK-SMP Debian 3.13.5-1(2014-03-04)

    • 如果代码位于共享库中,则可能您没有使用最新编译版本的代码。您可以使用
      ldd noloweradressgenerator
      查看程序的库依赖项;我不知道是否有可能从GDB中找到相关的库,但是应该有一种方法(如果你知道如何做,请评论或编辑)

      如果确实如此,您可能希望在运行程序之前在GDB中
      设置环境LD_LIBRARY_PATH
      ,将新构建的库放在任何已安装库之前。链接时,您可以考虑设置
      RPATH
      ELF变量,但这可能没有多大帮助


      另一种可能是在知道库未安装的系统上运行调试器。使用
      schroot
      将构建/调试/安装环境分开,我已经取得了很好的效果。

      CBKeyPairGenerate
      将是函数名,
      noLowerAddressGenerator
      是一个可执行文件。检查,但是:我假设gdb可以获取的路径上没有其他noLowerAddressGenerator的前任?只有一个noLowerAddressGenerator,当我传入文件的确切路径时,gdb怎么能在任何地方混淆文件?CBHDKeys.c文件是一个源文件,它内置在noLowerAddressGenerator链接的库中是的,我以前(忘了这一点)将库安装在/usr/local/lib中,它从那里加载,而不是我用
      -L
      标志给出的路径。这个问题的答案值得吗,还是应该删除?