我们通过转储文件网站运行CDB来分析转储。我们运行以下命令
sub setSymbolPath{
$ENV{'_NT_SYMBOL_PATH'} = 'SRV*c:\\websymbols*http://msdl.microsoft.com/download/symbols;
SRV*c:\\websymbols*http://ctxsym.citrix.com/symbols;
';
setSymbolPath();
## $dump_file is the full path to the dump file with a file name
## $mini_stack is the full path to the output file with a file name
open (DUMPFILE, "c:\\PROGRA~1\\DEBUGG~1\\cdb.exe
-z \"$dump_file\" -lines -c \".logopen $mini_stack;!sym noisy;.reload;!analyze -v;.ecxr;!for_each_frame dv /t;.logclose;q\" |");
close DUMPFILE;
当我们通过命令提示符运行CDB时,它可以加载Microsoft组件和工作文件的符号文件。但是,当相同的命令通过网站运行时,CDB无法找到Microsoft组件的符号。 代码用Perl编写,下面是运行CDB的代码片段。
User.findOne(1).exec(function(err, user) {
user = user.toJSON();
var moduleIds = _.map(user.grades, 'mod_id');
Module.find(moduleIds).exec(function(err, modules) {
_.forEach(user.grades, function(grade) {
var module = _.find(modules, { 'id': grade.mod_id });
grade.module = module;
});
console.log('User', user);
return;
});
});