按照你以上所说的 我应该如何获取到当前调用堆栈信息
时间: 2023-06-23 13:09:43 浏览: 65
获取当前调用堆栈信息的方法取决于你使用的编程语言和开发环境。一般来说,大多数编程语言都提供了一些函数或API可以获取当前调用堆栈信息。以下是一些常见编程语言的获取调用堆栈信息的方法:
- Java:使用 Thread.currentThread().getStackTrace() 方法。
- Python:使用 traceback.extract_stack() 方法。
- C++:使用 std::stacktrace 或 Boost.Stacktrace 库。
- JavaScript:使用 Error().stack 属性。
在实际应用中,你可以根据你的具体情况和需要选择合适的方法来获取当前调用堆栈信息。
相关问题
arthas 定位这个方法的调用次数及调用堆栈信息
可以使用arthas的`trace`命令来定位方法的调用次数及调用堆栈信息。具体操作如下:
1. 进入arthas控制台,通过`dashboard`命令查看当前应用的进程号。
2. 执行`trace <类名> <方法名>`命令,例如`trace com.example.demo.service.UserService getUserInfo`,表示跟踪`UserService`类中的`getUserInfo`方法。
3. arthas会输出该方法的调用次数及调用堆栈信息。可以通过按下键盘上的`Q`键来退出跟踪。
除了`trace`命令,arthas还提供了其他一些命令用于跟踪方法调用,例如`stack`、`watch`、`monitor`等。可以根据具体情况选择使用。
amdgpu 堆栈调用信息
以下是一个示例的 amdgpu 堆栈调用信息:
```
[<ffff800004d1b670>] amdgpu_fence_wait+0xd0/0x278 [amdgpu]
[<ffff800004ce5424>] ? amdgpu_vm_bo_update+0x54/0x54 [amdgpu]
[<ffff800004d24fbb>] amdgpu_sched_run_job+0x6b/0x108 [amdgpu]
[<ffff800004d2512e>] amdgpu_sched_main_thread+0x9e/0x1c8 [amdgpu]
[<ffff800004ce5424>] ? amdgpu_vm_bo_update+0x54/0x54 [amdgpu]
[<ffff800004ce5424>] ? amdgpu_vm_bo_update+0x54/0x54 [amdgpu]
[<ffff800004ce5424>] ? amdgpu_vm_bo_update+0x54/0x54 [amdgpu]
[<ffff800004d6c9a9>] kthread+0xf9/0x111
[<ffff80000480f9d1>] ret_from_fork+0x31/0x40
```
上述堆栈信息表示了一个 amdgpu 驱动程序的函数调用堆栈,最后一行是最先被调用的函数。下面是对每一行的解释:
- 第一行 `[<ffff800004d1b670>] amdgpu_fence_wait+0xd0/0x278 [amdgpu]` 表示当前正在执行的函数是 `amdgpu_fence_wait`,它位于 amdgpu 驱动程序中,偏移量为 `0xd0`,函数大小为 `0x278`。
- 第二行 `[<ffff800004ce5424>] ? amdgpu_vm_bo_update+0x54/0x54 [amdgpu]` 表示当前函数被调用时,正在执行另一个函数 `amdgpu_vm_bo_update`,但是由于没有堆栈信息,所以无法确定它的位置和大小。
- 第三行 `[<ffff800004d24fbb>] amdgpu_sched_run_job+0x6b/0x108 [amdgpu]` 表示当前函数是 `amdgpu_sched_run_job`,它位于 amdgpu 驱动程序中,偏移量为 `0x6b`,函数大小为 `0x108`。
- 第四行 `[<ffff800004d2512e>] amdgpu_sched_main_thread+0x9e/0x1c8 [amdgpu]` 表示当前函数是 `amdgpu_sched_main_thread`,它位于 amdgpu 驱动程序中,偏移量为 `0x9e`,函数大小为 `0x1c8`。
- 第五至第七行显示了函数 `amdgpu_vm_bo_update` 的堆栈信息,但是由于没有调用其它函数,所以堆栈信息中只有它自己的信息。
- 第八行 `[<ffff800004d6c9a9>] kthread+0xf9/0x111` 表示当前正在执行的函数是 `kthread`,它位于内核中,偏移量为 `0xf9`,函数大小为 `0x111`。
- 第九行 `[<ffff80000480f9d1>] ret_from_fork+0x31/0x40` 表示当前正在执行的函数是 `ret_from_fork`,它位于内核中,偏移量为 `0x31`,函数大小为 `0x40`。