作为任务的一部分,我正在创建一个基本网站.当rails服务器没有运行时,我为根目录执行"rspec",执行rspec.但测试失败了.当我启动rails服务器并从另一个终端窗口执行rspec(在转到根目录后),rspec不起作用.我收到以下消息 -
Tushars-MacBook-Pro:recipefinder tusharsaurabh $ rspec -bash:rspec:command not found
请让我知道,如何解决它.
我使用 windows-sys crate 编写了一个 Rust 程序,并收集所提供的查询的性能计数器值。我使用微软团队提供的示例程序(此处)。
该程序能够检索性能计数器值。然而,当我检查进程资源管理器以监视占用空间时,我注意到下面的私有字节图表。由于私有字节呈线性增加,因此表明存在内存泄漏。
我无法使用 Windbg,因为 Windbg 无法连接到 Microsoft 符号服务器。因此,我决定通过注释代码并检查私有字节来手动识别问题的根源。相关代码如下——
fn execute_perf_query(input_query: &String,perf_query: &mut Vec<PerfEntryForMongo>)->f64{
log::info!("Performing counter for {:?}", input_query);
let hostname = gethostname().into_string();
unsafe {
let mut query = 0;
let p: *const u16 = std::ptr::null();
PdhOpenQueryW(p, 0 as usize, &mut query);
}
return -1.0;
//println!("Returning Now");
}
Run Code Online (Sandbox Code Playgroud)
请注意,目前我已注释掉与PdhAddCounterW、 、相关的代码PdhCollectQueryData,PdhGetFormattedCounterValue以了解每个 Windows 调用对私有字节的影响。
Vec<PerfEntryForMongo>每次迭代后都会被清除,因此不会导致内存泄漏。hostname是一个字符串,将在堆上分配,但是一旦范围结束,内存将被释放。
我正在使用原始指针,但它是一个 NULL 指针,不应在堆中分配任何内存。我需要了解什么导致内存泄漏。我已经介绍了与引用、借用和不安全 Rust 相关的章节,但我无法确定内存泄漏的原因。
我试图使用EnumProcessesWin32 (psapi) 提供的函数枚举 Windows 进程。生活很顺利,所以我使用 Rust 而不是 C++。代码如下。
Cargo.toml
[dependencies.windows]
features = [
"Win32_Foundation",
"Win32_System_ProcessStatus"
]
Run Code Online (Sandbox Code Playgroud)
主程序.rs
use windows::Win32::System::ProcessStatus::*;
fn main() {
unsafe{
let mut cb_needed: u32 = 0;
let mut a_processes: Vec<u32> = Vec::with_capacity(1024);
let result: windows::Win32::Foundation::BOOL = EnumProcesses(a_processes.as_mut_ptr(), 1024*4, &mut cb_needed);
let mut _c_processes: u32 = 0;
_c_processes = cb_needed / 4;
println!("{:?}",_c_processes);
let mut count: u32 = 0;
while count < _c_processes {
println!("{:?}",a_processes[count as usize]);
count += 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试代码时,变量a_processes显示长度为零。然而,变量 …