【问题标题】:c++ srand works when I run the program but doesn't work in gdbc++ srand 在我运行程序时有效,但在 gdb 中无效
【发布时间】:2015-12-31 11:26:49
【问题描述】:

c++ srand 在我运行程序时工作,但在 gdb 中不起作用。 我正在使用 Ubuntu 登录到终端。 学习 C++。 如果我只是执行它,我的程序会按预期运行。但我真的需要开始学习使用调试器。当我逐步执行程序时,对 srand 的调用会出现以下错误。

12      srand(time(NULL));
(gdb) 
__srandom (x=1451559304) at random.c:210
210 random.c: No such file or directory.
(gdb) 
211 in random.c
(gdb) 
210 in random.c
(gdb) Quit

这是程序的第一部分,很简单。

1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 #include <string>
5 
6 using namespace std;
7 
8 
9 int main()
10 {       
11         int array_size=0;
12         srand(time(NULL));
13         cout<<"\n\nWhat size of an array would you like?\n";
14         cout<<": ";
15         cin>>array_size;
16         int my_array[array_size];
17         for (int i=0;i<array_size;i++)
18         {
19                 my_array[i]=(rand()%100)+1;
20         }
21         for(int i=0;i<array_size;i++)
22         {
23                 cout<<"\n"<<my_array[i];
24 
25         }

编译时我使用这一行。

g++ -g main.cpp -o a

当我启动调试器时,它会使用它。

gdb a

如果有任何帮助,我将不胜感激。 谢谢!

【问题讨论】:

  • 旁注:对动态大小的数组使用std::vector
  • 看来你已经进入 srand 函数,你不应该这样做。跳过它。了解stepnext GDB 命令之间的区别。
  • 为了详细说明错误,当您进入 srand 函数时,调试器将需要加载定义 srand 函数的源文件,因为您没有它,您将得到一个关于它没有被发现的错误。对于库或系统文件,这通常是您可以忽略的错误。
  • 太好了!谢谢!

标签: c++ gdb srand


【解决方案1】:

您正在步入标准库源代码。假设您确实有源,您可以设置 gdb 以使用 dirset directories 找到它们。但是大多数人没有他们的 C 标准库的源代码——除非你真的在尝试调试标准库代码本身,否则我建议使用 n(下一个)命令而不是 s(步骤)跳过srand

请注意,您得到的错误只是 gdb 找不到 srand 的源文件。它最终仍会逐步执行该函数 - 但它需要一些步骤,并且没有源代码来查看它在做什么,这是毫无意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多