简体   繁体   中英

htobe64 function disables debugger's ability to list source code

I have compiled the very simple program

$ cat main.cpp
#include <iostream>
int main() {
    uint64_t val=1;
    // val = htobe64(val);
    std::cout << val << std::endl;
}
$ g++ -g main.cpp -o a.out

When I debug it using cgdb I get the following:

$ cgdb a.out

CGDB 正常

But when I uncomment the line // val = htobe64(val) something strange happens:

$ cat main.cpp
#include <iostream>
int main() {
    uint64_t val=1;
    val = htobe64(val);
    std::cout << val << std::endl;
}
$ g++ -g main.cpp -o a.out
$ cgdb a.out    

CGDB不正常

Uncommenting this single line causes cgdb to start showing the splash screen and when I type start as in the screenshot it only gives me assembler code (before cgdb started directly showing the source code and not its splash screen). Furthermore somehow the file path /home/user/byteswap.h appears in the screenshot, but this file does not exist (In this example user is was my username and /home/user my working directory).

Can someone tell me what is happening here and what I can do to be able to debug a program that is calling htobe64 , ie how to achieve that cgdb will show me the source code as in the first example at the top?

Here are the tool versions:

$ cgdb --version
CGDB 0.7.1
Copyright 2002-2019 Bob Rossi and Mike Mueller.
CGDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for CGDB.

$ gdb --version
GNU gdb (Debian 8.2.1-2+b3) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ g++ --version
g++ (Debian 11.2.0-10) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

When posting this questions I became aware of the fact that my g++ version is very new compared to my gdb version (I recently updated it to have better C++20 support).

I turns out that updating the gdb version solved the problem: With gdb version GNU gdb (Debian 10.1-2) 10.1.90.20210103-git the problem is no longer present. I admit that I should have verified this before posting but I do not delete the question because it may help others having similar strange obervations.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM