调试问题排查:调试动态库,附加到进程,堆栈中没有当前对应模块的文件模块(文件名)和函数。
错误现场的情况:
1、调试员已经拿到了源码,打上了断点,放置的pdb符号文件,附加到进程。
2、但是在下方调用堆栈的窗口中并没有显示当前的文件模块。
3、没有显示文件模块自然也就无法显示“已加载符号”。也就无法正常调试了。
正常情况下:附加时会显示当前模块,一般就是文件名,以及显示该模块“已加载符号”。
原因:
1、是附加到进程时的进程号选择错误,导致该进程中并没有调用到当前调试模块对应的动态库和函数。
2、进程的运行未涉及到当前的调试模块,故堆栈中无法查找到当前文件模块,没有文件模块自然无法加载pdb符号。
解决方法:
1、确认了是附加到进程操作中进程号的选择出现了错误。
2、就需要点击调试-》分离,或调试-》停止调试,将功能模块与进程分开。
3、然后由调试员通过软件寻找准确进程号,或询问他人得到准确进程号。
4、使用准确的进程号重新进行附加到进程的操作。
此类问题定位思路:
前提:调试员知道调用堆栈窗口的作用,并知道正常调试的情况。
附加到进程以后,调用堆栈窗口会显示被附加的进程调用的模块和函数,并可以将指定了路径的pdb文件,加载给被调用的模块,然后才可以对相应的加载了pdb符号的模块进行调试,
具体现象:
1、无法在调用堆栈中找到当前需要被调试的功能模块,
2、结合调用堆栈窗口的功能可知,当前进程没有调用当前功能模块
3、正常情况下,当前进程应该要调用当前功能模块
推导:进程号选择有误
解决方法:寻找准确的进程号后再附加到进程。