作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 x86 linux 上,进程 A.exe 调用 dlopen() 来加载共享库 B.so。在 B.so 中,有一个构造函数,它想知道进程 A.exe 中的哪个函数在调用 dlopen() 之前被中断。
B.so中的构造函数(_init段)怎么知道?
最佳答案
如果我正确理解您的问题(“中断”可能会产生误导),您的应用程序 A 有多个位置可能会调用 dlopen() 并且您想知道从这些位置中的哪些位置调用了您。
首先,这听起来不对,因为共享库不应该对谁在加载它做出任何假设。如果是这样,您可以不在 Valgrind 中运行您的应用程序,因为在这种情况下,Valgrind 将执行加载而不是标准动态链接器,您的结果可能会出错。
其次,如果您确实需要这样做(为什么?),那么您可以在构造函数中进行回溯。然后向上搜索直到找到 dlopen(),然后在下一个更高的堆栈帧上找到调用 dlopen 的函数。
编辑:要将堆栈跟踪中的地址映射回函数,您将需要所涉及二进制文件的调试信息或任何其他方式将函数地址映射到符号名称。
关于c++ - 在共享库的构造函数(_init 部分)中,如何知道哪个函数被中断了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770034/
安装并修复我的 VS2015 实例后,我仍然无法让智能感知(服务器端)在我的 MVC View 中工作。当我在 session 中第一次打开 .cshtml 文件并找到 Activitylog 文件时
我是一名优秀的程序员,十分优秀!