如何测试一个程序函数调用及间接调用没有完全返回的?

ooolinux 2016-02-17 08:55:35
可能导致长时间运行栈溢出的。
...全文
326 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2016-04-02
  • 打赏
  • 举报
回复
引用 8 楼 u010165006 的回复:
[quote=引用 5 楼 paschen 的回复:] [quote=引用 2 楼 u010165006 的回复:] [quote=引用 1 楼 paschen 的回复:] 看 调用堆栈
怎么查看?[/quote] 百度,看你是什么编译器 , 一般可以打开一个叫调用堆栈(Call Stack)的窗口[/quote] 我主要用BCB,好像没发现。[/quote] BCB是有的,在【查看——调试窗口——堆栈】菜单
赵4老师 2016-02-19
  • 打赏
  • 举报
回复
引用 7 楼 u010165006 的回复:
[quote=引用 6 楼 zhao4zhong1 的回复:] 将函数中定义的局部变量的地址写日志到文件中,长时间运行后,查看地址的值是否越来越小。
Windows中栈内存是由高往低生长的吗?[/quote] 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
#include <stdio.h>
void func(int level) {
    int local_var;

    printf("level,&local_var=%d,0x%p\n",level,&local_var);
    if (level) func(level-1);
}
int main() {
    func(9);
    printf("\n");
    func(3);
    printf("\n");
    return 0;
}
//level,&local_var=9,0x0012FF48
//level,&local_var=8,0x0012FF3C
//level,&local_var=7,0x0012FF30
//level,&local_var=6,0x0012FF24
//level,&local_var=5,0x0012FF18
//level,&local_var=4,0x0012FF0C
//level,&local_var=3,0x0012FF00
//level,&local_var=2,0x0012FEF4
//level,&local_var=1,0x0012FEE8
//level,&local_var=0,0x0012FEDC
//
//level,&local_var=3,0x0012FF40
//level,&local_var=2,0x0012FF34
//level,&local_var=1,0x0012FF28
//level,&local_var=0,0x0012FF1C
//
//
ooolinux 2016-02-18
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
看 调用堆栈
怎么查看?
paschen 2016-02-18
  • 打赏
  • 举报
回复
引用 2 楼 u010165006 的回复:
[quote=引用 1 楼 paschen 的回复:] 看 调用堆栈
怎么查看?[/quote] 百度,看你是什么编译器 , 一般可以打开一个叫调用堆栈(Call Stack)的窗口
lm_whales 2016-02-18
  • 打赏
  • 举报
回复
另外,还可以输出log文件做记录
lm_whales 2016-02-18
  • 打赏
  • 举报
回复
A:目测 1)看有没有递归 2)看有没有自动变量(比如很大的数组),函数参数非常多的函数 有这些情况 看递归实现好坏 设法传递指针,而不是定义占用内存大的局部自动变量(数组) 其次看有没有抛出异常 在其次看有没有野指针之类的错误 B: 在开发环境中调试,看看调用栈
ooolinux 2016-02-18
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
将函数中定义的局部变量的地址写日志到文件中,长时间运行后,查看地址的值是否越来越小。
Windows中栈内存是由高往低生长的吗?
ooolinux 2016-02-18
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
[quote=引用 2 楼 u010165006 的回复:] [quote=引用 1 楼 paschen 的回复:] 看 调用堆栈
怎么查看?[/quote] 百度,看你是什么编译器 , 一般可以打开一个叫调用堆栈(Call Stack)的窗口[/quote] 我主要用BCB,好像没发现。
赵4老师 2016-02-18
  • 打赏
  • 举报
回复
将函数中定义的局部变量的地址写日志到文件中,长时间运行后,查看地址的值是否越来越小。
paschen 2016-02-17
  • 打赏
  • 举报
回复
看 调用堆栈

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧