如何查看GDB中返回的且未定义为独立变量的函数arg的值 我仍然在了解C++和gdB的用法.
我有下面的程序,在将其传递到函数之前声明并初始化了一个变量如何查看GDB中返回的且未定义为独立变量的函数arg的值 我仍然在了解C++和gdB的用法. ,c++,gdb,C++,Gdb,我有下面的程序,在将其传递到函数之前声明并初始化了一个变量startPos。使用GDB单步执行时,我可以在评估后打印startPos,并查看其值 #include <iostream> #include <string> in
startPos
。使用GDB单步执行时,我可以在评估后打印startPos
,并查看其值
#include <iostream>
#include <string>
int main(){
// replace the word red with blue
std::string toReplace{ "red" };
std::string str{ "I saw a red car yesterday." };
long unsigned startPos{ str.find("red") };
str.replace(startPos, toReplace.length(), "blue");
std::cout << str << '\n';
return 0;
}
但是现在我无法查看进入gdb时str.find(“red”)的计算结果。我尝试了info locals
和info args
,但它们没有显示我需要什么,或者我用错了
如何使用gdb查看返回值是什么或传递到函数中的是什么
PS:我将跳过任何标准库函数 您应该重新考虑不要进入库函数,而是进入它,然后立即
f
ini,从中返回,gdb将显示返回值。这是唯一的方法吗?我不想这样做,因为考虑到标准库的大量重用,“考虑到标准库的大量重用”是一个很大的不便。无论采用哪种方式,都必须在函数调用之前设置断点。在此之前,调试会话没有什么不同,这归结为快速执行三个命令,而不是一个命令。对我来说似乎没什么大不了的,特别是因为这只需要做一到两次,直到最初的问题被调试出来,每个人都开始做更大更好的事情。我的意思是,我不一定知道问题在特定的代码块中。因此,我将在我知道的最后一个位置设置一个断点,该位置可以正常工作,并且是一行一行地执行step
。我经常使用(重用)标准库函数,如果我不跳过所有/usr/include/*
头文件和源文件,我将始终如一地使用它们。但是你的意思是,如果我跳过标准库函数,就没有其他方法可以查看函数的参数是如何计算的?正确。调试器无法预见未来。在函数调用实际发生之前,调试器无法告诉您哪个参数被传递到函数调用中。您应该重新考虑不进入库函数,而是进入库函数,然后立即f
ini,从库函数返回,gdb将显示返回值。这是唯一的方法吗?我不想这样做,因为考虑到标准库的大量重用,“考虑到标准库的大量重用”是一个很大的不便。无论采用哪种方式,都必须在函数调用之前设置断点。在此之前,调试会话没有什么不同,这归结为快速执行三个命令,而不是一个命令。对我来说似乎没什么大不了的,特别是因为这只需要做一到两次,直到最初的问题被调试出来,每个人都开始做更大更好的事情。我的意思是,我不一定知道问题在特定的代码块中。因此,我将在我知道的最后一个位置设置一个断点,该位置可以正常工作,并且是一行一行地执行step
。我经常使用(重用)标准库函数,如果我不跳过所有/usr/include/*
头文件和源文件,我将始终如一地使用它们。但是你的意思是,如果我跳过标准库函数,就没有其他方法可以查看函数的参数是如何计算的?正确。调试器无法预见未来。在函数调用实际发生之前,调试器无法告诉您哪个参数被传递到函数调用中。
#include <iostream>
#include <string>
int main(){
// replace the word with red with blue
std::string toreplace{ "red" };
std::string str{ "i saw a red car yesterday." };
str.replace(str.find("red"), toReplace.length(), "blue");
std::cout << str << '\n';
return 0;
}