gpt4 book ai didi

c++ - 当源不可用时,找到 Visual Studio 2015 调试器读取符号定义的位置

转载 作者:行者123 更新时间:2023-11-30 17:01:58 35 4
gpt4 key购买 nike

我想查看从项目中的何处读取函数定义,因为它既不是我期望的位置,也不是 VS2015 中“转到定义”声称的位置。

我有一个调用静态库的应用程序,它调用第二个静态库,所有这些静态库都作为解决方案包含在 Visual Studio 中,并且两个库都作为应用程序的项目依赖项包含在内。当我从第一个库到代码中第二个库中定义的函数进行任何调用并右键单击->“转到定义”时,它会将我带到第二个库中的正确位置。

但是,它在运行时肯定无法从该源获取函数,因为它返回错误的答案,并且没有提供我为调试此问题而添加的控制台输出。我编写的另一个(玩具)应用程序用于检查代码,并且位于另一个包含库的不同解决方案中,它正确地接受了定义。

如果在调试时单击这些函数,我会被告知源不可用。显然它正在从某处读取定义,我可以查看反汇编。在查看了所有项目的属性并在我的计算机上搜索第二个库的其他版本之后,我仍然不知道它可能从哪里获得不同的定义。因此,了解调试器/编译器在编译代码中读取的位置非常有用,从中可以生成反汇编代码(并执行该函数)。

从我期望的位置执行的最后一行代码是:

dgstrf(opPt, column_permuted, relax, panel_size, etree, NULL, 0, col_perm_pt, row_perm_pt, lower, upper, glu, stats, status);

根据“Go To Definition”,它应该调用一个以以下开头的函数:

void
dgstrf (superlu_options_t *options, SuperMatrix *A,
int relax, int panel_size, int *etree, void *work, int lwork,
int *perm_c, int *perm_r, SuperMatrix *L, SuperMatrix *U,
GlobalLU_t *Glu, /* persistent to facilitate multiple factorizations */
SuperLUStat_t *stat, int *info)
{
printf("doing dgstrf\n");
...

一段时间后调用:

*info = dLUMemInit(fact, work, lwork, m, n, Astore->nnz,
panel_size, fill_ratio, L, U, Glu, &iwork, &dwork);

开始:

int
dLUMemInit(fact_t fact, void *work, int lwork, int m, int n, int annz,
int panel_size, double fill_ratio, SuperMatrix *L, SuperMatrix *U,
GlobalLU_t *Glu, int **iwork, double **dwork)
{
printf("doing dLUMemInit\n");...

依次调用 dLUWorkInit -> intCalloc,然后在真实应用程序中运行的版本(但不在可以运行的玩具应用程序中) ->superlu_abort_and_exit -> fprintf

fprintf(在 stdio.h 中)是自从我的包装函数到 dgstrf 以来的第一件事,调用堆栈显示它有源代码。

它抛出异常“写入位置 0x0000000000000024 时发生访问冲突。”就行了

__crt_va_start(_ArgList, _Format);
_Result = _vfprintf_l(_Stream, _Format, NULL, _ArgList);
__crt_va_end(_ArgList);
return _Result;

到目前为止,我已经浏览了应该的源代码,并用断点填充了它。它们没有被击中,我设置它产生的控制台输出也没有被击中。

最佳答案

对于我的特殊情况,我可以通过询问同事是否可以想到任何其他可能干扰的依赖项来找出替代定义的来源。这不是最令人满意的解决方案,但它可以。

关于c++ - 当源不可用时,找到 Visual Studio 2015 调试器读取符号定义的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750265/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com