程序调用栈信息,有可能通过逻辑来推演还原么?

weixi2864 2024-05-10 18:40:35

问题有点抽象,我描述一下。
目前在写一个小工具,用于帮助分析代码的脉络。
方式是在一些关键函数的第一行插入一行代码,这行代码用于获取当前的调用栈,并用合适的方式打印出来。

比如我的测试代码是这样的:
1 main()
2 a()
3  a1()
4   a11()
5   a12()
6  a2()
7 b()
我在函数a, a1, a12, a2, b分别做这行插入
也希望我的log能打出类似的格式来,帮我分析代码。
我的代码目前在Java, c#和c++上跑,未来可能会支持更多语言

但是我在实现c#端的时候发现问题
我无法完全准确知道我当前在哪里
比如a函数,它取到的frame是main, a
a1呢 它取到的main, a, a1
那么问题来了,我在a1的时候只希望在打印信息后追加a1, 也就是行号是3的位置
但是它并不知道main和a是它的下层栈,c#有个hash描述每个frame,但是不幸的是,a1里取到的a的那帧frame跟a里取到的不一样
别的语言我还没有具体看,但是c#我必须支持
那么问题来了,有什么办法能够推理出谁是谁的父栈,爷爷栈么
这样才能清晰的打印出父子关系。

ps 我目前简答的用了长度比较的方式来推算栈的回溯
比比长度,来扔掉不用的项,大致可用,但是我知道有两个明确的问题还没有解决
1 我的代码在不同的exe,dll使用,不是所有的调用都有统一的根节点,例如我写的那个main
2 还可能涉及线程的切换,让我的粗暴方法问题更多。

有哪位能有思路解决这个问题么 谢谢

...全文
227 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqc77c 05-11
  • 打赏
  • 举报
回复

学习了,好资料

189,548

社区成员

发帖
与我相关
我的任务
社区描述
加入我们一起摸鱼划水、分享快乐、学习交流 【QQ群:151836911】【版主微信:wh18363】
游戏经验分享 个人社区
社区管理员
  • 海拥✘
  • Code Writers
  • 芝麻粒儿
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

🎉 摸鱼一时爽,一直摸鱼一直爽;跟海海一起摸鱼,从入职摸到离职。

🎁 如果你是在上班时间看到了这句话,恭喜你,你已经是我们摸鱼大军中的中流砥柱了。

社区主页:https://bbs.csdn.net/forums/moyu (ctrl+D收藏一下吧)

⭐️ 摸鱼导航:

1、摸鱼小游戏:https://haiyong.site/moyu

2、学习资料:https://haiyong.site/doc/

3、摸鱼小工具:https://haiyong.site/tools/

4、摸鱼交流圈:https://haiyong.site/chat/

5、牛客【模拟面试、刷题神器】: http://mtw.so/5yjpN8

【社区积分规则】

  • 在社区「发帖」得10积分
  • 内容被管理员「加精」得10积分
  • 点赞他人内容得1积分
  • 评论内容得2积分

博主微信 👇👇👇

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