GCC debugger stack trace displays wrong file name and line number

后端 未结 11 1928
说谎
说谎 2021-01-21 00:22

I am trying to port a fairly large C++ project to using g++ 4.0 on Mac OS X. My project compiles without errors, but I can\'t get GDB to work properly. When I look at the stack

相关标签:
11条回答
  • 2021-01-21 00:56

    For a test, you could check if addr2line gives you expected values. If so, this would indicate that there's nothing wrong with the ELF generated by your compile/link parameters and casts all suspicion on GDB. If not, then suspicion is still on both the tools and the ELF file.

    0 讨论(0)
  • 2021-01-21 01:00

    I encountered this several years ago when transitioning from the Codewarrior compilers to Xcode. I believe the way to get around this is to put the flag "-fno-inline-functions" in Other C Flags (for Dev only).

    This problem was more pronounced on the PowerPC architecture for us.

    What about if you remove the "-fvisibility-inlines-hidden" and "-mfix-and-continue" flags?

    I've never had the "fix and continue" feature work properly for me.

    0 讨论(0)
  • 2021-01-21 01:01

    Are you compiling with optimization on? I've found that O2 or higher messes with the symbols quite a bit, making gdb and core files pretty much useless.

    Also, be sure you are compiling with the -g option.

    0 讨论(0)
  • 2021-01-21 01:06

    I have a new thing you can try.

    Just before your own main you can write

    #ifdef main
    #  error main is defined
    #endif
    
    int main(int argc, char *argv[]) {
    

    this should give an error if you have some header that redefines main.

    If you define an own you might get an warning where a previous definition was made

    #define main foo
    
    int main(int argc, char *argv[]) {
    

    You can also try to undef just before your main

    #undef main
    
    int main(int argc, char *argv[]) {
    
    0 讨论(0)
  • 2021-01-21 01:08

    See my answer here

    I have now downloaded and compiled the FreeImage sources and yes, the file b44ExpLogTable.cpp is compiled into libfreeimage.a. The problem looks like the script gensrclist.sh just collects all .cpp files without skipping the one with a main in. That script generates a file named Makefile.srcs but one is already supplied. (running it on my Leopard failed, some problem with sh - it worked if I changed sh to bash)

    Before you have changed anything this gives an a.out

    c++ libfreeimage.a
    

    The file Makefile.srcs has already been created so you should be able to remove the file b44ExpLogTable.cpp from it. Then do

    make -f Makefile.osx clean
    make -f Makefile.osx
    

    When this is done the above c++ libfreeimage.a should give the following error

    Undefined symbols:
      "_main", referenced from:
          start in crt1.10.5.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    
    0 讨论(0)
提交回复
热议问题