第一次在vs2010 运行rawos

本文探讨了在Visual Studio中遇到的无法找到或打开PDB文件的问题,并分享了解决方案。即使存在这些问题,项目仍能正常运行。文章还提到了在开启debug symbol后,部分DLL的符号能够成功加载。

这好像是警告信息,无关紧要。。。

'raw_vc.exe': Loaded 'E:\Own\OS\rawos\rawos——20130120\raw_vcRaw-OS 0.99i\vc\raw_vc\Debug\raw_vc.exe', Symbols loaded.

'raw_vc.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\msvcr100d.dll', Symbols loaded.
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\winmm.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\secur32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\imm32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\lpk.dll', Cannot find or open the PDB file

'raw_vc.exe': Loaded 'C:\WINDOWS\system32\usp10.dll', Cannot find or open the PDB file


参考

http://stackoverflow.com/questions/12954821/cannot-find-or-open-the-pdb-file-in-visual-studio-c-2010

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/c208d609-c3e0-4868-9ee5-46464f155a18









其实即使有这些警告,rawos 也已经在运行了。。。。



打开了debug的symbol之后,

'raw_vc.exe': Loaded 'E:\Own\OS\rawos\rawos——20130120\raw_vcRaw-OS 0.99i\vc\raw_vc\Debug\raw_vc.exe', Symbols loaded.
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\msvcr100d.dll', Symbols loaded.
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\winmm.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\secur32.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\imm32.dll', Cannot find or open the PDB file
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\lpk.dll', Symbols loaded (source information stripped).
'raw_vc.exe': Loaded 'C:\WINDOWS\system32\usp10.dll', Symbols loaded (source information stripped).


=======================================================

学习的方法同样重要。


感谢txj_rawos的无私奉献。




<think> 我们有两个程序片段:第一个是`core.py`中定义的`SiCThicknessAnalyzer`类和相关函数,第二个是主程序`main.py`。要在第二个程序(主程序)中调用第一个程序(core模块)的功能,我们需要进行模块导入。 根据代码结构,第二个程序(主程序)已经通过`import core`导入了第一个程序的功能。 但是,从您提供的代码看,主程序已经包含了调用`core`模块的代码。例如: analyzer = core.SiCThicknessAnalyzer(n_carrier=n_carrier, R2=R2) 因此,第二个程序调用第一个程序的方法已经实现。但如果您指的是如何在不同的文件组织中使用,这里给出一般步骤: 步骤1:确保两个文件在同一个目录下(或者core.py在Python路径中) 第一个程序保存为`core.py` 第二个程序(主程序)保存为`main.py` 步骤2:在main.py中使用`import core`导入 步骤3:通过`core.SiCThicknessAnalyzer`来创建分析器对象 但是,您提供的代码中,主程序和core模块的代码在同一个文件里?实际上,从代码看,您似乎将两个部分写在同一个文件中(最后有`if __name__ == "__main__":`)。 如果您已经将两个部分写在一个文件中,那么不需要额外的导入,因为它们在同一个作用域。 然而,如果按照您的要求,将第一个程序(core模块)和第二个程序(主程序)分成两个文件,则应该: 文件1:core.py (包含SiCThicknessAnalyzer类及其方法) 文件2:main.py (包含主程序逻辑,包括main函数) 并在main.py中导入core.py。 注意:您提供的代码中,主程序部分还定义了`plot_results`、`analyze_file`等方法,这些方法在core.py中并没有。因此,我们需要重新组织代码。 根据您提供的完整代码,我注意到: - 主程序中定义了`plot_results`、`analyze_file`、`sensitivity_analysis`、`save_detailed_results`等方法,但是这些方法是在`SiCThicknessAnalyzer`类之外定义的。而在主程序中,这些函数被用来作为独立函数使用。 但是,在`plot_results`函数中,使用了`self.sellmeier`和`self.drude`,这意味着它应该是`SiCThicknessAnalyzer`类的一个方法。因此,我建议将`plot_results`、`analyze_file`、`sensitivity_analysis`等方法移动到`SiCThicknessAnalyzer`类中。 由于代码较长,我在这里给出重构的建议: 1. 将`core.py`中的`SiCThicknessAnalyzer`类保持不变(即第一个程序)。 2. 将主程序中的函数(如`plot_results`、`analyze_file`等)移动到`SiCThicknessAnalyzer`类中作为方法。 3. 将主程序中的其他功能(如`main`函数、`save_detailed_results`等)保留在第二个程序(main.py)中。 这样,我们就可以在main.py中导入core模块,然后使用`SiCThicknessAnalyzer`类的实例来调用这些方法。 但是,由于您提供的代码中主程序部分已经使用了这些函数,并且它们依赖于`SiCThicknessAnalyzer`类的内部状态,所以重构为类方法是合理的。 例如,将`plot_results`函数改为`SiCThicknessAnalyzer`的方法: 修改前: def plot_results(self, file_path, wavelength, raw_refl, smooth_refl,peaks, valleys, thickness, A, B, theta_deg, n_carrier, quality): ... # 注意这里的self并不是指向SiCThicknessAnalyzer实例 修改后: 将这个函数定义放到`SiCThicknessAnalyzer`类中,并且将第一个参数`self`作为类的实例。 由于时间关系,这里不完整重构所有函数,但您可以根据需要移动函数定义。 另一种做法是保持两个文件: core.py:包含SiCThicknessAnalyzer类(包含核心计算) main.py:包含主程序逻辑,以及一些辅助函数(如绘图、文件分析等),这些辅助函数接受一个analyzer对象作为参数。 例如,在main.py中: def plot_results(analyzer, file_path, wavelength, raw_refl, smooth_refl, peaks, valleys, thickness, theta_deg, n_carrier, quality): # 使用analyzer.sellmeier等方法 然后在调用时传入analyzer对象。 由于您提供的代码较长,我无法在此处完整重写。因此,我将提供一种简单的解决方案:将两个程序放在同一个文件中,这样就不需要额外的导入。或者,如果您已经分成了两个文件,那么确保在main.py中导入core,并正确使用。 根据您最后一次提供的代码,您已经将core导入,所以调用方式为:`core.SiCThicknessAnalyzer`。 如果您想要在第二个程序中调用第一个程序(core模块)的功能,可以按照以下示例: 在main.py中: import core # 创建分析器对象 analyzer = core.SiCThicknessAnalyzer(n_carrier=5e18, R2=0.20338) # 然后使用analyzer对象调用其方法 wavelength = ... # 数据 wave_number = ... # 数据 reflectivity = ... # 数据 # 调用预处理 wavelength, raw_refl, smooth_refl, peaks, valleys = analyzer.preprocess_data(wave_number, reflectivity) 但是请注意,您提供的main.py中,`plot_results`和`analyze_file`等函数并没有在core模块中。所以,如果您将这些函数放在main.py中,那么它们就可以直接使用core模块中的类。 总结:如果两个程序在两个文件中,即core.py和main.py,那么main.py中通过`import core`来使用core.py中的类。而main.py中定义的函数可以操作core.py中的类实例。 因此,您不需要做特别的额外操作,只要导入即可。 示例代码: # main.py import core import numpy as np import pandas as pd # ... 其他导入 # 然后定义plot_results等函数,这些函数使用core.SiCThicknessAnalyzer的实例 如果您希望将这些函数也放入core模块中,那么您需要将这些函数移到core.py中,并作为类的方法(推荐)或者作为模块级的函数。 但根据您当前的代码结构,`plot_results`函数使用了`self`参数(尽管它不是类的方法),这是因为您将它放在一个类中?实际上,您在第二个程序(主程序)中将这些函数定义为独立函数,但使用了`self`作为参数名。这容易引起混淆。我建议: 1. 将`plot_results`等函数移动到`SiCThicknessAnalyzer`类中(放在core.py中),并作为实例方法。 2. 或者,将`plot_results`等函数的第一个参数改为`analyzer`(即SiCThicknessAnalyzer实例),并作为独立函数放在core.py中或main.py中。 由于您提供的代码中,在主程序部分定义了这些函数,而且它们使用了`SiCThicknessAnalyzer`实例的方法(如`sellmeier`),因此我建议采用第二种方式,并放在main.py中(作为独立函数)。 但是,为了清晰,我提供一个修改后的`plot_results`函数,它不再使用`self`作为第一个参数,而是使用`analyzer`(表示分析器实例): def plot_results(analyzer, file_path, wavelength, raw_refl, smooth_refl, peaks, valleys, thickness, A, B, theta_deg, n_carrier, quality): # 在函数内部,使用analyzer.sellmeier等方法 然后在调用时: plot_results(analyzer, file_path, ...) 这样,在main.py中,我们创建了analyzer对象,然后传给这个函数。 由于修改代码量较大,这里仅给出关键步骤。 最后,关于如何在第二个程序中调用第一个程序,答案就是:通过模块导入。 如果您将第一个程序保存为core.py,那么在第二个程序中: import core # 调用类 analyzer = core.SiCThicknessAnalyzer(...) 然后就可以使用analyzer对象的方法了。 如果您的两个程序在同一个文件中,则不需要导入。 鉴于您提供的代码已经将两部分写在同一个文件中(在最后有`if __name__ == '__main__':`),那么直接运行该文件即可。 如果您决定分成两个文件,请将`core`相关的类放到core.py,其余的函数和主程序放到main.py,并确保在main.py中导入core。 由于代码太长,无法在此完整展示分文件后的代码,但我会给出一个示例: core.py 内容: import numpy as np from scipy.signal import savgol_filter, find_peaks from scipy.optimize import least_squares # 物理常数 PHYS_CONST = { ... } class SiCThicknessAnalyzer: def __init__(self, n_carrier=5e18, R2=0.20338): ... def sellmeier(self, lambda_um): ... # ... 其他方法,如drude, preprocess_data, calculate_thickness, _optimize_params, calculate_fit_quality main.py 内容: import os import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib import rcParams import core # 导入core模块 # 设置中文字体 rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans'] rcParams['axes.unicode_minus'] = False # 定义独立函数,如plot_results, analyze_file等,这些函数接受core.SiCThicknessAnalyzer的实例作为参数 def plot_results(analyzer, file_path, wavelength, raw_refl, smooth_refl, peaks, valleys, thickness, A, B, theta_deg, n_carrier, quality): ... # 函数实现,内部使用analyzer.sellmeier等 # 同样,analyze_file函数修改为: def analyze_file(analyzer, file_path, theta_deg, n_carrier, plot=True): ... # 使用analyzer.preprocess_data等 # 同理,sensitivity_analysis函数 def sensitivity_analysis(analyzer, file_path, theta_deg, n_carrier_range, param='carrier'): ... # 其他函数:save_detailed_results, generate_report, main等 if __name__ == "__main__": main() 在main函数中,创建analyzer对象: analyzer = core.SiCThicknessAnalyzer(n_carrier=n_carrier, R2=R2) 然后调用: result = analyze_file(analyzer, file_path, theta_deg, n_carrier, plot=True) 这样就可以将两个程序连接起来。 注意:由于您提供的原始代码中,主程序部分定义的函数(如plot_results)使用了`self`作为参数,这原本可能是作为类的方法设计的,但现在我们改为独立函数,并将`self`替换为`analyzer`(即类的实例)。 这样,第二个程序(main.py)就成功调用了第一个程序(core.py)的功能。 如果由于循环导入或其他问题导致无法运行,请确保两个文件在同一个目录下,并且没有命名冲突。 最后,如果涉及到类内部状态的大量访问,将函数作为类的方法可能是更好的选择。因此,如果条件允许,建议将`plot_results`等方法整合到`SiCThicknessAnalyzer`类中。 </think> 要在第二个程序中调用第一个程序的功能,关键在于正确导入模块和实例化类对象。以下是清晰的实现方法: ### 完整调用方法及代码示例 ```python # 文件: core.py(第一个程序) import numpy as np from scipy.signal import savgol_filter, find_peaks from scipy.optimize import least_squares # 物理常数定义保持不变... class SiCThicknessAnalyzer: # 类实现保持一致... def __init__(self, n_carrier=5e18, R2=0.20338): # ...初始化代码 def sellmeier(self, lambda_um): # ...实现 # 其他方法保持不变... ``` ```python # 文件: main_app.py(第二个程序) import os import pandas as pd import numpy as np import matplotlib.pyplot as plt from core import SiCThicknessAnalyzer # 关键导入语句 def analyze_sample(file_path, angle, carrier_concentration): """在第二个程序中调用第一个程序的功能""" # 1. 创建分析器实例 analyzer = SiCThicknessAnalyzer( n_carrier=carrier_concentration, R2=0.20338 # 根据实际需要设置 ) # 2. 调用预处理方法 wavelength, raw_refl, smooth_refl, peaks, valleys = analyzer.preprocess_data( wave_number, reflectivity ) # 3. 计算厚度 thickness, A, B, quality = analyzer.calculate_thickness( wavelength, smooth_refl, extrema, angle, carrier_concentration ) # 4. 生成结果报告 print(f"计算结果: 厚度={thickness:.4f}μm, 折射率={quality['refractive_index']:.4f}") # 5. 可选:绘制图表 analyzer.plot_results( file_path, wavelength, raw_refl, smooth_refl, peaks, valleys, thickness, A, B, angle, carrier_concentration, quality ) return { 'thickness': thickness, 'refractive_index': quality['refractive_index'], 'quality_metrics': quality } # 使用示例 if __name__ == "__main__": results = analyze_sample("附件1.xlsx", theta_deg=15, n_carrier=1e18) print("分析完成:", results) ``` ### 关键步骤解释 1. **模块导入原理** ```python from core import SiCThicknessAnalyzer ``` - 当两个文件在同一目录时,Python会自动搜索当前目录 - 使用`from...import`语法避免命名空间冲突 - 确保core.py文件名与导入名一致(大小写敏感) 2. **实例化类对象** ```python analyzer = SiCThicknessAnalyzer(n_carrier=1e18, R2=0.20338) ``` - 必须创建类的实例才能访问其方法 - 通过构造函数传递必要参数(n_carrier, R2) - 实例保存分析所需的状态信息 3. **调用类方法** ```python analyzer.preprocess_data(...) analyzer.calculate_thickness(...) ``` - 使用实例对象调用类中定义的方法 - 保持与类定义中相同的参数顺序和数据类型 - 方法返回结果可直接在调用程序中使用 ### 跨目录调用方案 如果文件在不同目录,需要设置Python路径: ```python import sys sys.path.append("/path/to/core_directory") # 添加core.py所在路径 from core import SiCThicknessAnalyzer ``` ### 常见问题解决 1. **模块找不到错误** - 确保core.py在Python搜索路径中 - 检查文件名和扩展名(应为.py) - 重启Python环境使新文件生效 2. **属性访问错误** - 确认已实例化类而不只是导入 - 检查方法名称拼写(区分大小写) - 验证方法是否需要特定初始化参数 3. **数据传递问题** - 确保输入数据类型与类方法要求匹配 - 使用try-except捕获异常: ```python try: result = analyzer.calculate_thickness(...) except ValueError as e: print(f"计算错误: {str(e)}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值