2001 USENIX Annual
清华会议分级

2
(2)rank1.5 不在 rank1 中的会议,如果符合下面的条件,其 RANK 为 1.5 *IF >= 1.2,且领域不是非常窄 *IF >=0.9,且领域不是非常窄,且在作为参考的 3 所大学(MIT, UCLA, NTU) 的列表中不只被列做 RANK2 *IF >= 0.6,且在至少一个参考列表中列为 RANK1
列表的生成采用量化标准+定性分析的方法 量化指标包括:Citeseer 给出的排序结果、清华大学计算机系计算的排 序结果(按照 SCI 引用因子的计算方式计算的 IF 排序,计算方法见附 录)、三所大学(MIT、UCLA、NUS)的排序结果。各个列表中的数据统 计见下表。 定性分析由计算机系组织各所代表进行讨论,主要进行了三次讨论,参加 讨论的人员包括:孙茂松、陈文光、冯建华、唐杰、王建勇、徐明伟、 任丰原、刘永进、张敏、崔勇和白晓颖。 部分会议的引用因子满足进入 rank2 的条件,但参与前期讨论的老师都不 熟悉该会议,暂时列为待确认 rank2 会议。 最后 rank1, rank1.5, rank2 将最多只保留 300 个会议。 Rank1 MIT UCLA NUS Citeseer 覆盖的会 议 THU(清华大学) 覆盖的会议 具体评估指标: (1)rank1 *IF 3.5 以上,且其领域不是非常窄 *IF >= 1.5, 且该领域没有其它明显强于此会议的其他会议 *0.8<=IF<1.5,且在作为参考的 3 所大学(MIT, UCLA, NTU)的列表中都列为 RANK1 的会议 38 91 59 965 1202 Rank2 0 93 96
5
3. 一流会议列表(Rank1.5)
会议缩写 会议全称 每年篇数 影响因子 5.79
IEEE会议排名

Rank 1:SIGCOMM:ACM Conf on Comm Architectures,Protocols &Apps INFOCOM: Annual Joint Conf IEEE Comp &Comm SocSPAA: Symp on Parallel Algms and ArchitecturePODC:ACM Symp on Principles of Distributed ComputingPPoPP:Principles and Practice of Parallel ProgrammingRTSS:Real Time Systems SympSOSP: ACM SIGOPS Symp on OS PrinciplesSOSDI: Usenix Symp on OS Design and ImplementationCCS: ACM Conf on Comp and Communications SecurityIEEE Symposium on Security and PrivacyMOBICOM: ACM Intl Conf on Mobile Computing and NetworkingUSENIX Conf on Internet Tech and SysICNP:Intl Conf on Network ProtocolsPACT:Intl Conf on Parallel Arch and Compil TechRTAS: IEEE Real-Time and Embedded Technology and Applications Symposium ICDCS:IEEE Intl Conf on Distributed Comp SystemsRank 2:CC: Compiler ConstructionIPDPS: Intl Parallel and Dist Processing SympIC3N: Intl Conf on Comp Comm and NetworksICPP: Intl Conf on Parallel ProcessingSRDS: Symp on Reliable Distributed SystemsMPPOI:Massively Par Proc Using Opt InterconnsASAP: Intl Conf on Apps for Specific Array ProcessorsEuro—Par:European Conf。
(会议管理)CS专业重要国际学术会议

ACM/IFIP/USENIX中间件国际会议
58.
ACMInternational Symposium on Mobile Ad Hoc Networking and Computing
MobiHoc
ACM移动自组织网络与计算国际会议
59.
InternationalConference on MobileSystems,Applications,andServices
ICCCN
计算机通信和网络国际会议
45.
International Conference on Distributed Computing Systems
ICDCS
分布式计算系统国际会议
46.
IEEEInternational Conference on Data Engineering
ICDE
IEEE数据工程国际会议
EUROCRYPT
加密技术的理论与应用国际会议
37.
The AnnualConference of the European Association for Computer Graphics
Eurographics
计算机图形学欧洲协会年度会议
38.
ACMEUROSYSConference
EUROSYS
11.
International Conference on Computer Vision
ICCV
计算机视觉国际会议
12.
IEEE International Conference on Network Protocols
ICNP
IEEE网络协议国际会议
13.
IEEE International Conference on Computer Communication
USENIX Association

WWW:
Rights to individual papers remain with the author or the author's employer.
Permission is granted for noncommercial reproduction of the work for educational or research purposes.
The implementation uses The Linux Thread Library which is included with glibc package. This library provides very simple view of shared memory because each thread has the same memory space (data and stack). Note that The Linux Thread Library does not use real threads but traditional Linux processes sharing their memory space so in the following we will use the 2 words thread/process with the same meaning.
© 2000 by The USENIX Association
All Rights Reserved
For more information about the USENIX Association:
Phone: 1 510 528 8649
FAX: 1 510 548 5738
Email: office@
国内外各领域顶级学术会议大全

实用标准文档
序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
刊物名称(以期刊名称的拼音为序) 总被引频次
电子学报(英文版、中文版)
中文版 1676
高技术通讯(英文版、中文版) 计算机辅助设计与图形学学报 计算机工程 计算机集成制造系统 J COMPUT SCI & TECH 计算机学报 计算机研究与发展 计算数学(英) 科学通报(英文版、中文版) 模式识别与人工智能 软件学报 系统仿真学报 系统工程理论与实践
数学类第 4 名 综合类第 1 名
计算机类第 10 名 计算机类第 2 名 电子类第 7 名 信息类第 7 名 信息类第 3 名 计算机类第 16 名
综合类第 10 名
计算机类第 7 名 计算机类第 6 名
综合类第 11 名
计算机类第 9 名 计算机类第 18 名 计算机类第 20 名 计算机类第 21 名
28 IEEE/ACM Design Automation Conference
国际计算语言学会年会,是本领域最权威的国际学术会 议之一,每年举办一次 计算语言学会议,也是本领域最权威的国际学术会议之 一,两年一次 是语音和声学信号处理领域最权威的国际学术会议之 一,也是图像、视频信号处理领域的权威会议之一,每 年举办一次 自然语言处理亚洲联盟主办的国际会议,是自然语言处 理领域亚洲区域最有影响的学术会议,基本是每年举办 一次
网络测量领域顶级的专业会议
网络测量
下一代互联网研究 rank1
中心
12 ICCV: IEEE International Conference on
Computer Vision
领域顶级国际会议,录取率 20%左右,2 年一次,中国 计算机视觉,模式
计算机科学与技术学院申请博士学位发表学术论文的规定(2008.9上网)

计算机科学与技术学院申请博士学位发表学术论文的规定根据《华中科技大学申请博士学位发表学术论文的规定》,我院博士研究生申请博士学位前,须按以下要求之一发表学术论文:1、A类、B类或学院规定的国际顶尖学术会议论文一篇;2、SCI期刊论文一篇,C类一篇,国内权威刊物一篇;3、SCI期刊论文一篇,国内权威刊物二篇;4、SCI期刊论文一篇,C类二篇。
A、B、C类期刊参照《华中科技大学期刊分类办法》中规定的计算机科学与技术及其它相关学科的期刊执行,其中C类含被EI检索的国际会议论文。
学院规定的国内权威刊物指中国科学、科学通报、Journal of computer Science and Technology、计算机学报、软件学报、计算机研究与发展、Fronties of computer Science in China、电子学报、自动化学报、通信学报、数学学报、应用数学学报、计算机辅助设计与图形学学报及其它相关学科的一级学会学报。
学位申请人发表或接收发表的学术论文中,至少有一篇是以外文全文在C类及以上刊物上发表。
学位申请人发表或被接收发表的学术论文必须是其学位论文的重要组成部分,是学位申请人在导师指导下独立完成的科研成果,以华中科技大学为第一署名单位,以申请人为第一作者(与导师共同发表的论文,导师为第一作者,申请人可以第二作者)。
对于“同等贡献作者”排名的认定,参照《华中科技大学期刊分类办法》(校人[2008]28号文)执行。
本规定自2008年入学博士生起执行。
本规定的解释和修改权属计算机科学与技术学院学位审议委员会。
华中科技大学计算机科学与技术学院学位审议委员会二○○八年九月一日为提高研究生培养质量、提高学术水平、促进国际学术交流,经计算机学院学位审议委员会研究决定,国际顶尖学术会议分为A、B两类,分类如下:一、A类1. International Conference on Architectural Support for ProgrammingLanguages and Operating Systems (ASPLOS)2. ACM Conference on Computer and Communication Security (CCS)3. USENIX Conference on File and Storage Techniques (FAST)4. International Symposium on High Performance ComputerArchitecture (HPCA)5. International Conference on Software Engineering (ICSE)6. International Symposium on Computer Architecture (ISCA)7. USENIX Conference on Operating System and Design (OSDI)8. ACM SIGCOMM Conference (SIGCOMM)9. ACM Annual International ACM SIGIR Conference on Research andDevelopment in Information Retrieval (SIGIR)10. International Conference on Management of Data and Symposium onPrinciples of Database Systems (SIGMOD/PODS)11. ACM Symposium on Operating Systems Principles (SOSP)12. Annual ACM Symposium on Theory of Computing (STOC)13. USENIX Annual Technical Conference (USENIX)14. ACM International Conference on Virtual Execution Environments(VEE)15. International Conference on Very Large Data Bases (VLDB)二、B类1. International Conference on Dependable Systems and Networks (DSN)2. IEEE Symposium on Foundations of Computer Science (FOCS)3. IEEE International Symposium on High Performance DistributedComputing (HPDC)4. International Conference on Distributed Computing Systems (ICDCS)5. International Conference on Data Engineering (ICDE)6. IEEE International Conference on Network Protocols (ICNP)7. ACM International Conference on Supercomputing (ICS)8. International Joint Conference on Artificial Intelligence (IJCAI)9. IEEE Conference on Computer Communications (INFOCOM)10. ACM SIGKDD International Conference on Knowledge Discovery andData Mining (KDD)11. Annual IEEE/ACM International Symposium on Microarchitecture(MICRO)12. ACM/IFIP/USENIX International Middleware Conference (Middleware)13. ACM International Conference on Multimedia (MM)14. ACM International Conference on Mobile Systems, Applications, andServices (MobiSys)15. ACM Conference on Programming Language Design andImplementation (PLDI)16. Annual ACM Symposium on Principles of Distributed Computing(PODC)17. ACM Symposium on Principles of Programming Languages (POPL)18. ACM SIGPLAN Symposium on Principles and Practice of ParallelProgramming (PPoPP)19. IEEE Real-Time Systems Symposium (RTSS)20. Supercomputing (SC'XY) Conference21. ACM Conference on Computer Graphics and Interactive Techniques(SIGGRAPH)22. ACM Conference on Measurement and Modeling of ComputerSystems (SIGMETRICS)23. IEEE Symposium on Security and Privacy (SP)24. Annual ACM Symposium on Parallel Algorithms and Architectures(SPAA)25. International World Wide Web Conference (WWW)华中科技大学计算机科学与技术学院学位审议委员会二○○八年十一月十七日计算机学院资助教师和学生参加顶尖国际学术会议试行办法院办字[2006]06号为了促进计算机学院师生开展国际学术交流,提高学术水平,经第75次学院办公会议研究,并经第2次教授咨询委员会咨询,学院资助教师和在校学生参加顶尖国际学术会议,制定本办法。
互补MOSFET的脉冲变压器隔离驱动电路设计

Microsoft Windows 2000 / Intel Pentium III 800MHz / RealTek 8139 100Mbps/ 256MB RAM;
创
引言
新 随着电力半导体器件的发展, 已经出现了各种各 样的全控型器件, 最常用的有适用于大功率场合的大 功 率 晶 体 管 (GTR)、适 用 于 中 小 功 率 场 合 但 快 速 性 较 好
功 率 MOSFET 的 栅 极 输 入 端 相 当 于 一 个 容 性 网 络, 它的工作速度与驱动源内阻抗有关。理想的栅极 驱动电路的等效电路如图所示, 由于 Ciss 的存在, 静态 时栅极驱动电流几乎为零, 但在开通和关断动态过程 中, 仍需要一定的驱动电流。
金一鸣:硕士研究生
够快的上升和下降速度; ②开通时以低电阻为栅极电 容充电, 关断时为栅极提供低电阻放电回路, 以提高 功率 MOSFET 的开关速度;③为了使功率 MOSFET 可 靠触发导通, 触发脉冲电压应高于管子的开启电压, 为了防止误导通, 在其截止时应提供足够负的反向栅 源电压; ④功率开关管开关时所需驱动电流为栅极电 容的充放电电流, 功率管极间电容越大, 所需电流越 大, 即带负载能力越大。
功率 MOSFET 是电压型驱动器件, 没有少数载流 子的存贮效应, 输入阻抗高, 因而开关速度可以很高, 驱动功率小, 电路简单。但功率 MOSFET 的极间电容 较大, 其等效电路如图 1 所示, 输入电容 Ciss, 输出电容 Coss 和反馈电容 Crss 与极间电容的关系可表示为:
计算机学科领域高质量国际学术会议

计算机学科领域高质量国际学术会议分区表1.AREA: Data Bases一区 (332)1.SIGMOD: ACM SIGMOD Conf on Management of Data (78)2.PODS: ACM SIGMOD Conf on Principles of DB Systems(30)3.VLDB: Very Large Data Bases (96)4.SIGKDD –ACM International Conference on Knowledge Discovery andData Mining (128)二区 (230)1.ICDE: Intl Conf on Data Engineering (93)2.EDBT /ICDT: EDBT/ICDT joint conference (27)3.ICDM - IEEE International Conference on Data Mining (70)4.SDM - SIAM Conference on Data Mining (40)2.AREA: Software Engineering:一区(225)1.ICSE: International Conference on Software Engineering (56)2.FSE: ACM Conference on the Foundations of Software Engineering (42)3.OOPSLA: ACM SIGPLAN Conference on Object-Oriented ProgrammingSystems, Languages and Applications (33)4.ASE: IEEE International Conference on Automated Software Engineering(94)二区 (230)1.ISSTA: ACM SIGSOFT International Symposium on Software Testing andAnalysis (33)2.ECOOP: European Conference on Object-Oriented Programming (27)3.ESEC: European Software Engineering Conference (50)4.ICSM: IEEE International Conference on Software Maintenance (40)5.RE: IEEE International Conference on Requirements Engineering (39)6.ICSR: International Conference on Software Reuse (41)3.AREA: Security:一区 (102)1.S&P: IEEE Symposium on Security and Privacy (28)S: ACM Conference on Computer and Communications Security (51)enix security: Usenix Symposium on Security (23)二区 (68)1.NDSS: ISOC Network and Distributed System Security Symposium (22)2.ACSAC: Annual Computer Security Applications (46)4.AREA: Architecture一区 (136)1.ISCA: ACM/IEEE Symp on Computer Architecture (37)2.MICRO: Intl Symp on Microarchitecture (35)3.HPCA: IEEE Symp on High-Perf Comp Architecture (34)4.PACT: IEEE Intl Conf on Parallel Architectures and CompilationTechniques (30)二区(22)1.ISPASS: IEEE International Symposium on Performance Analysis ofSystems and Software (22)5.AREA: Programming Languages:一区(95)1.PLDI: ACM-SIGPLAN Symposium on Programming Language Design &Implementation (34)2.POPL: ACM-SIGACT Symposium on Principles of ProgrammingLanguages (35)3.PPoPP: ACM SIGPLAN Symposium on Principles and Practice of ParallelProgramming(26)二区 (21)1.CGO: International Symposium on Code Generation and Optimization6.AREA: System Technology一区(114)1.OSDI: USENIX Operating Systems Design and Implementation (26/2=13)2.SOSP: ACM SIGOPS Symp on OS Principles (25/2=13)3.ASPLOS: Architectural Support for Prog Lang and OS (31)4.FAST: USENIX Conference on File and Storage Technologies (23)enix: Annual Usenix Technical Conference (34)二区(155)1.DSN: Annual IEEE/IFIP International Conference on Dependable Systemsand Networks (59)2.Eurosys: European Conference in Computer Systems (26)3.HOTOS: Workshop on Hot Topics in Operating Systems (24)4.SRDS: Symp on Reliable Distributed Systems (28)5.VEE: International Conference on Virtual Execution Environments. (18) 7.Distributed and Parallel Computing一区: (62)1.PODC: ACM Symposium on Principles of Distributed Computing (32)2.NSDI: Usenix Symposium on Networked Systems Design andImplementation (30)二区: (247)1.ICS: Intl Conf on Supercomputing (37)2.SC: ACM/IEEE Conf on High Performance Networking and Computing(65)3.HPDC: High Performance Distributed Computing (18)4.ICDCS: IEEE International Conference on Distributed ComputingSystems(74)5.SPAA: ACM Symposium on Parallel Algorithms and Architectures (53)8.AREA: Networking一区(125)1.SIGCOMM: ACM Conf on Comm Architectures, Protocols & Apps (36)2.MOBICOM: ACM SIGMOBILE Annual International Conference on MobileComputing and Networking (31)3.SIGMETRICS: ACM SIG on computer and communication metrics andperformance (36)4.MOBISYS: ACM SIGMOBILE International Conference on Mobile Systems,Applications, and Services (22)二区 (374)COM: Annual Joint Conf IEEE Comp & Comm Soc (311)2.MOBIHOC: The ACM International Symposium on Mobile Ad HocNetworking and Computing (44)3.IMC: Internet Measurement Conference(19)9.Area:Multimedia Processing,Vision,graphics一区(201)1.ICCV:International Conference on Computer Vision (47)2.SIGGRAPH (98)3.ACM MM:ACM Multimedia Conference (56)二区(133)1.CVPR:Computer Vision and Pattern Recognition (65)2.ECCV:European Conference on Computer Vision (40)Vis:IEEE Information Visualization Conference (28)10.A rea: AI ,NLP,Machine learning,Neural Networks一区(380)1.IJCAI:International Joint Conference on Artificial Intelligence (212/2=106)2.ICML:International Conference on Machine Learning (155)3.ACL:Association of Computational Linguistics (119)二区(581)1.AAAI:(227)2.UAI:Conference in Uncertainty in Artificial Intelligence (73)3.NIPS:Advances in Neural Information Processing (28)4.COLT:Annual Conference on Computational Learning Theory (47)5.CONLL:Conference on Computational Natural Language Learning (20)6.COLING:International Conference on Computational Linguistics (153/2=77)7.EMNLP:Conference on Empirical Methods on Natural Language Processing(109)11.A REA: Algorithms and Theory一区(172)1.STOC: ACM Symp on Theory of Computing (77)2.FOCS: IEEE Symp on Foundations of Computer Science (63)3.CRYPTO: Advances in Cryptology (32)二区 (442)1.SODA: ACM/SIAM Symp on Discrete Algorithms (139)2.ICALP:International Colloquium on Automata, Languages and Programming(128)3.ESA: European Symp on Algorithms (67)4.SCG: ACM Symp on Computational Geometry (42)5.EUROCRYPT: European Conf on Cryptography (33)6.TCC: Theory of Cryptography (33)12.A REA: Web and Service Computing一区(174)1.WWW: International World Wide Web Conference (89)2.SIGIR:ACM International Conference on Information Retrieval (85)二区 (225)1.WI:IEEE/WIC/ACM International Conferences on Web Intelligence (78)2.ISWC :International Semantic Web Conference (57)3.ICWS:The International Conference on Web Services (90)13.A REA: HCI and CSCW一区 (221)1.CHI: ACM SIGCHI Conference on Computer-Human Interaction (157)2.CSCW: the ACM Conference on Computer Supported Cooperative Work(64)二区 (85)1.UIST: ACM Symposium on User Interface Software and Technology (24)2.GROUP: ACM Conference on Supporting Group Work (38)3.ECSCW: European Conference on Computer-Supported Cooperative Work(23)14.A REA: embedded一区 (152)1.DAC: Design Automation Conference (152)二区(138)1.IC-SAMOS: International Conference on Embedded Computer Systems:Architectures, Modeling, and Simulation (31)2.LCTES: ACM conference on Languages, Compilers, and Tools forEmbedded Systems (17)3.EMSOFT: IEEE International conference on Embedded software (20)4.CASES: Intl Conf on Compilers, Architecture, and Synthesis for EmbeddedSystems (27)5.CODES+ISSS: International Conference on Hardware-Software Codesignand System Synthesis (43)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USENIX AssociationProceedings of the2001 USENIX AnnualTechnical ConferenceBoston, Massachusetts, USAJune 25–30, 2001THE ADVANCED COMPUTING SYSTEMS ASSOCIATION© 2001 by The USENIX Association All Rights Reserved For more information about the USENIX Association: Phone: 1 510 528 8649FAX: 1 510 548 5738Email: office@ WWW: Rights to individual papers remain with the author or the author's employer.Permission is granted for noncommercial reproduction of the work for educational or research purposes.This copyright notice must be included in the reproduced paper. USENIX acknowledges all trademarks herein.An Embedded Error Recovery and Debugging Mechanism for ScriptingLanguage ExtensionsDavid M.BeazleyDepartment of Computer ScienceUniversity of ChicagoChicago,Illinois60637beazley@AbstractIn recent years,scripting languages such as Perl, Python,and Tcl have become popular development tools for the creation of sophisticated application software. One of the most useful features of these languages is their ability to easily interact with compiled languages such as C and C++.Although this mixed language ap-proach has many benefits,one of the greatest drawbacks is the complexity of debugging that results from using interpreted and compiled code in the same application. In part,this is due to the fact that scripting language interpreters are unable to recover from catastrophic er-rors in compiled extension code.Moreover,traditional C/C++debuggers do not provide a satisfactory degree of integration with interpreted languages.This paper describes an experimental system in which fatal exten-sion errors such as segmentation faults,bus errors,and failed assertions are handled as scripting language ex-ceptions.This system,which has been implemented as a general purpose shared library,requires no modifica-tions to the target scripting language,introduces no per-formance penalty,and simplifies the debugging of mixed interpreted-compiled application software.1IntroductionSlightly more than ten years have passed since John Ousterhout introduced the Tcl scripting language at the 1990USENIX technical conference[1].Since then, scripting languages have been gaining in popularity as evidenced by the wide-spread use of systems such as Tcl,Perl,Python,Guile,PHP,and Ruby[1,2,3,4,5,6]. In part,the success of modern scripting languages is due to their ability to be easily integrated with software written in compiled languages such as C,C++,and For-tran.In addition,a wide variety of wrapper generation tools can be used to automatically produce bindings be-tween existing code and a variety of scripting language environments[7,8,9,10,11,12,13,14,15].As a result, a large number of programmers are now using scripting languages to control complex C/C++programs or as a tool for re-engineering legacy software.This approach is attractive because it allows programmers to benefit from theflexibility and rapid development of scripting while retaining the best features of compiled code such as high performance[16].A critical aspect of scripting-compiled code integra-tion is the way in which it departs from traditional C/C++development and shell scripting.Rather than building stand-alone applications that run as separate processes,extension programming encourages a style of programming in which components are tightly inte-grated within an interpreter that is responsible for high-level control.Because of this,scripted software tends to rely heavily upon shared libraries,dynamic loading, scripts,and third-party extensions.In this sense,one might argue that the benefits of scripting are achieved at the expense of creating a more complicated development environment.A consequence of this complexity is an increased de-gree of difficulty associated with debugging programs that utilize multiple languages,dynamically loadable modules,and a sophisticated runtime environment.To address this problem,this paper describes an experimen-tal system known as WAD(Wrapped Application De-bugger)in which an embedded error reporting and de-bugging mechanism is added to common scripting lan-guages.This system converts catastrophic signals such as segmentation faults and failed assertions to exceptions that can be handled by the scripting language interpreter. In doing so,it provides more seamless integration be-tween error handling in scripting language interpreters and compiled extensions.2The Debugging ProblemNormally,a programming error in a scripted applica-tion results in an exception that describes the problem and the context in which it occurred.For example,an error in a Python script might produce a traceback simi-lar to the following:%python foo.pyTraceback(innermost last):File"foo.py",line11,in?foo()File"foo.py",line8,in foobar()File"foo.py",line5,in barspam()File"foo.py",line2,in spam doh()NameError:dohIn this case,a programmer might be able to apply a fix simply based on information in the traceback.Al-ternatively,if the problem is more complicated,a script-level debugger can be used to provide more information. In contrast,a failure in compiled extension code might produce the following result:%python foo.pySegmentation Fault(core dumped)In this case,the user has no idea of what has happened other than it appears to be“very bad.”Furthermore, script-level debuggers are unable to identify the problem since they also crash when the error occurs(they run in the same process as the interpreter).This means that the only way for a user to narrow the source of the problem within a script is through trial-and-error techniques such as inserting print statements,commenting out sections of scripts,or having a deep intuition of the underlying im-plementation.Obviously,none of these techniques are particularly elegant.An alternative approach is to run the application un-der the control of a traditional debugger such as gdb [17].Although this provides some information about the error,the debugger mostly provides detailed infor-mation about the internal implementation of the script-ing language interpreter instead of the script-level code that was running at the time of the error.Needless to say,this information isn’t very useful to most program-mers.A related problem is that the structure of a scripted application tends to be much more complex than a tra-ditional stand-alone program.As a result,a user may not have a good sense of how to actually attach an exter-nal debugger to their script.In addition,execution may occur within a complex run-time environment involving events,threads,and network connections.Because of this,it can be difficult for the user to reproduce and iden-tify certain types of catastrophic errors if they depend on timing or unusual event sequences.Finally,this ap-proach requires a programmer to have a C development environment installed on their machine.Unfortunately, this may not hold in practice.This is because script-ing languages are often used to provide programmability to applications where end-users write scripts,but do not write low-level C code.Even if a traditional debugger such as gdb were mod-ified to provide better integration with scripting lan-guages,it is not clear that this would be the most nat-ural solution to the problem.For one,having to run a separate debugging process to debug extension code is unnatural when no such requirement exists for scripts. Moreover,even if such a debugger existed,an inexperi-enced user may not have the expertise or inclination to use it.Finally,obscure fatal errors may occur long after an application has been deployed.Unless the debugger is distributed along with the application in some manner, it will be extraordinary difficult to obtain useful diagnos-tics when such errors occur.The current state of the art in extension debugging is to simply add as much error checking as possible to ex-tension modules.This is never a bad thing to do,but in practice it’s usually not enough to eliminate every pos-sible problem.For one,scripting languages are some-times used to control hundreds of thousands to millions of lines of compiled code.In this case,it is improbable that a programmer will foresee every conceivable error. In addition,scripting languages are often used to put new user interfaces on legacy software.In this case,script-ing may introduce new modes of execution that cause a formerly“bug-free”application to fail in an unexpected manner.Finally,certain types of errors such asfloating-point exceptions can be particularly difficult to eliminate because they might be generated algorithmically(e.g.,as the result of instability in a numerical method).There-fore,even if a programmer has worked hard to eliminate crashes,there is usually a small probability that an ap-plication may fail under unusual circumstances.3Embedded Error ReportingRather than modifying an existing debugger to sup-port scripting languages,an alternative approach is to add a more powerful error handling and reporting mech-anism to the scripting language interpreter.We have im-plemented this approach in the form of an experimental system known as WAD.WAD is packaged as dynami-cally loadable shared library that can either be loaded as a scripting language extension module or linked to ex-%python foo.pyTraceback(most recent call last):File"<stdin>",line1,in?File"foo.py",line16,in?foo()File"foo.py",line13,in foobar()File"foo.py",line10,in barspam()File"foo.py",line7,in spamdoh.doh(a,b,c)SegFault:[C stack trace]#20x00027774in call_builtin(func=0x1c74f0,arg=0x1a1ccc,kw=0x0)in’ceval.c’,line2650 #10xff083544in_wrap_doh(self=0x0,args=0x1a1ccc)in’foo_wrap.c’,line745#00xfe7e0568in doh(a=3,b=4,c=0x0)in’foo.c’,line28/u0/beazley/Projects/WAD/Python/foo.c,line28int doh(int a,int b,int*c){=>*c=a+b;return*c;}Figure1:Cross language traceback generated by W AD for a segmentation fault in a Python extensionisting extension modules as a library.The core of the system is generic and requires no modifications to the scripting interpreter or existing extension modules.Fur-thermore,the system does not introduce a performance penalty as it does not rely upon program instrumentation or tracing.W AD works by converting fatal signals such as SIGSEGV,SIGBUS,SIGFPE,and SIGABRT into scripting language exceptions that contain debugging in-formation collected from the call-stack of compiled ex-tension code.By handling errors in this manner,the scripting language interpreter is able to produce a cross-language stack trace that contains information from both the script code and extension code as shown for Python and Tcl/Tk in Figures1and2.In this case,the user is given a very clear idea of what has happened without having to launch a separate debugger.The advantage to this approach is that it provides more seamless integration between error handling in scripts and error handling in extensions.In addition,it elimi-nates the most common debugging step that a developer is likely to perform in the event of a fatal error–running a separate debugger on a corefile and typing’where’to get a stack trace.Finally,this allows end-users to pro-vide extension writers with useful debugging informa-tion since they can supply a stack trace as opposed to a vague complaint that the program“crashed.”4Scripting Language InternalsIn order to provide embedded error recovery,it is criti-cal to understand how scripting language interpreters in-terface with extension code.Despite the wide variety of scripting languages,essentially every implementation uses a similar technique for accessing foreign code. Virtually all scripting languages provide an extension mechanism in the form of a foreign function interface in which compiled procedures can be called from the scripting language interpreter.This is accomplished by writing a collection of wrapper functions that conform to a specified calling convention.The primary purpose of the wrappers are to marshal arguments and return values between the two languages and to handle errors.For example,in Tcl,every wrapper function must conform to the following prototype:intwrap_foo(ClientData clientData,Tcl_Interp*interp,int objc,Tcl_Obj*CONST objv[]){/*Convert arguments*/.../*Call a function*/Figure2:Dialog box with W AD generated traceback information for a failed assertion in a Tcl/Tk extensionresult=foo(args);/*Set result*/...if(success){return TCL_OK;}else{return TCL_ERROR;}}Another common extension mechanism is an ob-ject/type interface that allows programmers to create new kinds of fundamental types or attach special prop-erties to objects in the interpreter.For example,both Tcl and Python provide an API for creating new“built-in”objects that behave like numbers,strings,lists,etc.In most cases,this involves setting up tables of function pointers that define various properties of an object.For example,if you wanted to add complex numbers to an interpreter,you mightfill in a special data structure with pointers to methods that implement various numerical operations like this:NumberMethods ComplexMethods{complex_add,complex_sub,complex_mul,complex_div,...};Once registered with the interpreter,the methods in this structure would be invoked by various interpreter opera-tors such as,,,and.Most interpreters handle errors as a two-step process in which detailed error information isfirst registered with the interpreter and then a special error code is re-turned.For example,in Tcl,errors are handled by set-ting error information in the interpreter and returning a value of TCL ERROR.Similarly in Python,errors are handled by calling a special function to raise an excep-tion and returning NULL.In both cases,this triggers the interpreter’s error handler—possibly resulting in a stack trace of the running script.In some cases,an interpreter might handle errors using a form of the C longjmp function.For example,Perl provides a special function die that jumps back to the interpreter with a fatal error [11].The precise implementation details of these mecha-nisms aren’t so important for our discussion.The critical point is that scripting languages always access extension code though a well-defined interface that precisely de-fines how arguments are to be passed,values are to be returned,and errors are to be handled.5Scripting Languages and SignalsUnder normal circumstances,errors in extension code are handled through the error-handling API provided by the scripting language interpreter.For example,if aninvalid function parameter is passed,a program can sim-ply set an error message and return to the interpreter. Similarly,automatic wrapper generators such as SWIG can produce code to convert C++exceptions and other C-related error handling schemes to scripting language errors[18].On the other hand,segmentation faults, failed assertions,and similar problems produce signals that cause the interpreter to abort execution.Most scripting languages provide limited support for Unix signal handling[19].However,this support is not sufficiently advanced to recover from fatal signals pro-duced by extension code.Unlike signals generated for asynchronous events such as I/O,execution can not be resumed at the point of a fatal signal.Therefore,even if such a signal could be caught and handled by a script, there isn’t much that it can do except to print a diagnostic message and abort before the signal handler returns.In addition,some interpreters block signal delivery while executing extension code–opting to handle signals at a time when it is more convenient.In this case,a signal such as SIGSEGV would simply cause the whole appli-cation to freeze since there is no way for execution to continue to a point where the signal could be delivered. Thus,scripting languages tend to either ignore the prob-lem or label it as a“limitation.”6Overview of WADW AD installs a signal handler for SIGSEGV,SIG-BUS,SIGABRT,SIGILL,and SIGFPE using the sigaction function[19].Furthermore,it uses a spe-cial option(SA SIGINFO)of signal handling that passes process context information to the signal handler when a signal occurs.Since none of these signals are normally used in the implementation of the scripting interpreter or by user scripts,this does not usually override any pre-vious signal handling.Afterwards,when one of these signals occurs,a two-phase recovery process executes. First,information is collected about the execution con-text including a full stack-trace,symbol table entries, and debugging information.Then,the current stream of execution is aborted and an error is returned to the interpreter.This process is illustrated in Figure3.The collection of context and debugging information involves the following steps:The program counter and stack pointer are obtained from context information passed to the signal han-dler.The virtual memory map of the process is obtained from/proc and used to associate virtual memory addresses with executablefiles,shared libraries, and dynamically loaded extension modules[20].The call stack is unwound to collect traceback in-formation.At each step of the stack traceback, symbol table and debugging information is gath-ered and stored in a generic data structure for later use in the recovery process.This data is ob-tained by memory-mapping the objectfiles associ-ated with the process and extracting symbol table and debugging information.Once debugging information has been collected,the signal handler enters an error-recovery phase that at-tempts to raise a scripting exception and return to a suit-able location in the interpreter.To do this,the following steps are performed:The stack trace is examined to see if there are any locations in the interpreter to which control can be returned.If a suitable return location is found,the CPU con-text is modified in a manner that makes the signal handler return to the interpreter with an error.This return process is assisted by a small trampoline function(partially written in assembly language) that arranges a proper return to the interpreter af-ter the signal handler returns.Of the two phases,thefirst is the most straightforward to implement because it involves standard Unix API func-tions and commonfile formats such as ELF and stabs [21,22].On the other hand,the recovery phase in which control is returned to the interpreter is of greater interest. Therefore,it is now described in greater detail.7Returning to the InterpreterTo return to the interpreter,WAD maintains a table of symbolic names that correspond to locations within the interpreter responsible for invoking wrapper functions and object/type methods.For example,Table1shows a partial list of return locations used in the Python im-plementation.When an error occurs,the call stack is scanned for thefirst occurrence of any symbol in this table.If a match is found,control is returned to that location by emulating the return of a wrapper function with the error code from the table.If no match is found, the error handler simply prints a stack trace to standard output and aborts.When a symbolic match is found,WAD invokes a special user-defined handler function that is written for a specific scripting language.The primary role of this handler is to take debugging information gathered from the call stack and generate an appropriate scripting lan-guage error.One peculiar problem of this step is that the>>>foo()Traceback(most recent call last): File"<stdin>",line1,in? SegFault:[C stack trace]...[Python internals]call builtin()wrap foo()foo()doh()SIGSEGVWAD signal handler1.Unwind C stack2.Gather symbols and debugging info3.Find safe return location4.Raise Python exception5.Modify CPU context and returnreturn assistReturn from signal NULLReturn to interpreterFigure3:Control Flow of the Error Recovery Mechanism for Pythongeneration of an error may require the use of parame-ters passed to a wrapper function.For example,in the Tcl wrapper shown earlier,one of the arguments was an object of type“Tcl Interp*”.This object contains information specific to the state of the interpreter(and multiple interpreter objects may exist in a single appli-cation).Unfortunately,no reference to the interpreter object is available in the signal handler nor is a refer-ence to interpreter guaranteed to exist in the context of a function that generated the error.To work around this problem,W AD implements a fea-ture known as argument stealing.When examining the call-stack,the signal handler has full access to all func-tion arguments and local variables of each function on the stack.Therefore,if the handler knows that an error was generated while calling a wrapper function(as de-termined by looking at the symbol names),it can grab the interpreter object from the stack frame of the wrap-per and use it to set an appropriate error code before re-turning to the interpreter.Currently,this is managed by allowing the signal handler to steal arguments from the caller using positional information.For example,to grab the Tcl Interp*object from a Tcl wrapper func-tion,code similar to the following is written:Tcl_Interp*interp;int err;interp=(Tcl_Interp*)wad_steal_outarg(stack,"TclExecuteByteCode",1,&err);...if(!err){Tcl_SetResult(interp,errtype,...);Tcl_AddErrorInfo(interp,errdetails); }In this case,the Tcl interpreter argument passed to a wrapper function is stolen and used to generate an er-ror.Also,the name TclExecuteByteCode refers to the calling function,not the wrapper function itself.AtPython symbol Error return valuecall builtin NULLPyObject Print-1PyObject CallFunction NULLPyObject CallMethod NULLPyObject CallObject NULLPyObject Cmp-1PyObject DelAttrString-1PyObject DelItem-1PyObject GetAttrString NULLTable1:A partial list of symbolic return locations in the Python interpreterthis time,argument stealing is only applicable to simple types such as integers and pointers.However,this ap-pears to be adequate for generating scripting language errors.8Register ManagementAfinal issue concerning the return mechanism has to do with the behavior of the non-local return to the inter-preter.Roughly speaking,this emulates the C longjmp library call.However,this is done without the use of a matching setjmp in the interpreter.The primary problem with aborting execution and re-turning to the interpreter in this manner is that most compilers use a register management technique known as callee-save[23].In this case,it is the responsibility of the called function to save the state of the registers and to restore them before returning to the caller.By making a non-local jump,registers may be left in an in-consistent state due to the fact that they are not restored to their original values.The longjmp function in the C library avoids this problem by relying upon setjmp to save the registers.Unfortunately,W AD does not have this luxury.As a result,a return from the signal handler may produce a corrupted set of registers at the point of return in the interpreter.The severity of this problem depends greatly on the architecture and compiler.For example,on the SPARC, register windows effectively solve the callee-save prob-lem[24].In this case,each stack frame has its own reg-ister window and the windows areflushed to the stack whenever a signal occurs.Therefore,the recovery mech-anism can simply examine the stack and arrange to re-store the registers to their proper values when control is returned.Furthermore,certain conventions of the SPARC ABI resolve several related issues.For exam-ple,floating point registers are caller-saved and the con-tents of the SPARC global registers are not guaranteed to be preserved across procedure calls(in fact,they are not even saved by setjmp).On other platforms,the problem of register manage-ment becomes more interesting.In this case,a heuristic approach that examines the machine code for each func-tion on the call stack can be used to determine where the registers might have been saved.This approach is used by gdb and other debuggers when they allow users to in-spect register values within arbitrary stack frames[17]. Even though this sounds complicated to implement,the algorithm is greatly simplified by the fact that compilers typically generate code to store the callee-save registers immediately upon the entry to each function.In addi-tion,this code is highly regular and easy to examine.For instance,on i386-Linux,the callee-save registers can be restored by simply examining thefirst few bytes of the machine code for each function on the call stack tofig-ure out where values have been saved.The following code shows a typical sequence of machine instructions used to store callee-save registers on i386-Linux:foo:55pushl%ebp89e5mov%esp,%ebp83a0subl$0xa0,%esp56pushl%esi57pushl%edi...As a fall-back,WAD could be configured to return control to a location previously specified with setjmp. Unfortunately,this either requires modifications to the interpreter or its extension modules.Although this kind of instrumentation could be facilitated by automatic wrapper code generators,it is not a preferred solution and is not discussed further.9InitializationTo simplify the debugging of extension modules,it is desirable to make the use of WAD as transparent as pos-sible.Currently,there are two ways in which the system is used.First,WAD may be explicitly loaded as a script-ing language extension module.For instance,in Python, a user can include the statement import libwadpy in a script to load the debugger.Alternatively,WAD can be enabled by linking it to an extension module as a shared library.For instance:%ld-shared$(OBJS)-lwadpyIn this latter case,WAD initializes itself whenever the extension module is loaded.The same shared libraryis used for both situations by making sure two types of initialization techniques are used.First,an empty ini-tialization function is written to make W AD appear like a proper scripting language extension module(although it adds no functions to the interpreter).Second,the real initialization of the system is placed into the initializa-tion section of the WAD shared library objectfile(the “init”section of ELFfiles).This code always executes when a library is loaded by the dynamic loader is com-monly used to properly initialize C++objects.There-fore,a fairly portable way to force code into the ini-tialization section is to encapsulate the initialization in a C++statically constructed object like this:class InitWad{public:InitWad(){wad_init();}};/*This forces InitWad()to execute on loading.*/static InitWad init;The nice part about this technique is that it allows W AD to be enabled simply by linking or loading;no special initialization code needs to be added to an ex-tension module to make it work.In addition,due to the way in which the loader resolves and initializes libraries, the initialization of WAD is guaranteed to execute before any of the code in the extension module to which it has been linked.The primary downside to this approach is that the W AD shared objectfile can not be linked directly to an interpreter.This is because W AD sometimes needs to call the interpreter to properly initialize its excep-tion handling mechanism(for instance,in Python,four new types of exceptions are added to the interpreter). Clearly this type of initialization is impossible if W AD is linked directly to an interpreter as its initialization pro-cess would execute before before the main program of the interpreter started.However,if you wanted to per-manently add WAD to an interpreter,the problem is eas-ily corrected byfirst removing the C++initializer from W AD and then replacing it with an explicit initialization call someplace within the interpreter’s startup function. 10Exception ObjectsBefore W AD returns control to the interpreter,it col-lects all of the stack-trace and debugging information it was able to obtain into a special exception object. This object represents the state of the call stack and in-cludes things like symbolic names for each stack frame, the names,types,and values of function parameters and stack variables,as well as a complete copy of data on the stack.This information is represented in a generic manner that hides platform specific details related to the CPU,objectfile formats,debugging tables,and so forth. Minimally,the exception data is used to print a stack trace as shown in Figure1.However,if the interpreter is successfully able to regain control,the contents of the exception object can be freely examined after an error has occurred.For example,a Python script could catch a segmentation fault and print debugging information like this:try:#Some buggy code...except SegFault,e:print’Whoa!’#Get WAD exception objectt= e.args[0]#Print location infoprint t.__FILE__print t.__LINE__print t.__NAME__print t.__SOURCE__...Inspection of the exception object also makes it pos-sible to write post mortem script debuggers that merge the call stacks of the two languages and provide cross language diagnostics.Figure4shows an example of a simple mixed language debugging session using the W AD post-mortem debugger(wpm)after an extension error has occurred in a Python program.In thefigure, the user isfirst presented with a multi-language stack trace.The information in this trace is obtained both from the W AD exception object and from the Python trace-back generated when the exception was raised.Next, we see the user walking up the call stack using the’u’command of the debugger.As this proceeds,there is a seamless transition from C to Python where the trace crosses between the two languages.An optional feature of the debugger(not shown)allows the debugger to walk up the entire C call-stack(in this case,the trace shows information about the implementation of the Python in-terpreter).More advanced features of the debugger al-low the user to query values of function parameters,lo-cal variables,and stack frames(although some of this information may not be obtainable due to compiler op-timizations and the difficulties of accurately recovering register values).11Implementation DetailsCurrently,W AD is implemented in ANSI C and small amount of assembly code to assist in the return to the interpreter.The current implementation supports。